Alpine Docker 定义特定的 python 版本 (python3-3.8.7-r0:breaks: world[python3=3.6.9-r3])
Alpine Docker define specific python version (python3-3.8.7-r0:breaks: world[python3=3.6.9-r3])
当我想构建我的 Alpine Docker 时,我在定义特定 python 版本时遇到错误。
我的Docker文件:
FROM python:3-alpine
RUN apk --no-cache add build-base openldap-dev python2-dev 'python3=3.6.9-r3' 'python3-dev=3.6.9-r3'
RUN pip3 install python-ldap sqlalchemy requests
ADD ucs-root-ca.crt /usr/local/share/ca-certificates/foo.crt
RUN chmod 644 /usr/local/share/ca-certificates/foo.crt && update-ca-certificates
COPY templates ./templates
COPY api.py filedb.py syncer.py ./
VOLUME [ "/db" ]
VOLUME [ "/conf/dovecot" ]
VOLUME [ "/conf/sogo" ]
ENTRYPOINT [ "python3", "syncer.py" ]
当我想要构建我的 dockerfile 时出现以下错误:
ERROR: unable to select packages:
python3-3.8.7-r0:
breaks: world[python3=3.6.9-r3]
satisfies: python3-dev-3.8.7-r0[python3=3.8.7-r0]
python3-dev-3.8.7-r0:
breaks: world[python3-dev=3.6.9-r3]
The command '/bin/sh -c apk --no-cache add build-base openldap-dev python2-dev 'python3=3.6.9-r3' 'python3-dev=3.6.9-r3'' returned a non-zero code: 2
apk 的错误是因为在 Alpine 存储库中找不到特定的 Python 3 版本。
python3=3.6.9-r3
目前仅存在于 Alpine 3.9 main
存储库中:
https://pkgs.alpinelinux.org/package/v3.9/main/x86/python3
python:3-alpine
图像似乎是基于最新的 Alpine 3.13。所以找不到3.6.9的包。
要安装该特定版本,您必须告诉 apk
使用该 3.9 存储库(如果您不在 Alpine 3.9 上):
apk add python3-dev=3.6.9-r3 --repository=http://dl-cdn.alpinelinux.org/alpine/v3.9/main
但是,有一个问题:python3-dev=3.6.9-r3
与 Alpine 3.9 兼容,并且不能与更高版本的 Alpine 很好地混合。例如:
gdbm-1.19-r0:
conflicts: gdbm-1.13-r1
gdbm-1.13-r1[so:libgdbm_compat.so.4=4.0.0]
satisfies: python3-3.6.9-r3[so:libgdbm_compat.so.4]
libsasl-2.1.27-r10[so:libgdbm.so.6]
python2-2.7.18-r1[so:libgdbm_compat.so.4]
因此,如果您倾向于使用 Python 3.6.9
具体来说,您必须 运行 在 Alpine 3.9 上使用它,它已经很老了。
如果您不介意使用较旧的 Alpine 版本,只需将 Dockerfile 中的第一行替换为:
FROM alpine:3.9
当我想构建我的 Alpine Docker 时,我在定义特定 python 版本时遇到错误。
我的Docker文件:
FROM python:3-alpine
RUN apk --no-cache add build-base openldap-dev python2-dev 'python3=3.6.9-r3' 'python3-dev=3.6.9-r3'
RUN pip3 install python-ldap sqlalchemy requests
ADD ucs-root-ca.crt /usr/local/share/ca-certificates/foo.crt
RUN chmod 644 /usr/local/share/ca-certificates/foo.crt && update-ca-certificates
COPY templates ./templates
COPY api.py filedb.py syncer.py ./
VOLUME [ "/db" ]
VOLUME [ "/conf/dovecot" ]
VOLUME [ "/conf/sogo" ]
ENTRYPOINT [ "python3", "syncer.py" ]
当我想要构建我的 dockerfile 时出现以下错误:
ERROR: unable to select packages:
python3-3.8.7-r0:
breaks: world[python3=3.6.9-r3]
satisfies: python3-dev-3.8.7-r0[python3=3.8.7-r0]
python3-dev-3.8.7-r0:
breaks: world[python3-dev=3.6.9-r3]
The command '/bin/sh -c apk --no-cache add build-base openldap-dev python2-dev 'python3=3.6.9-r3' 'python3-dev=3.6.9-r3'' returned a non-zero code: 2
apk 的错误是因为在 Alpine 存储库中找不到特定的 Python 3 版本。
python3=3.6.9-r3
目前仅存在于 Alpine 3.9 main
存储库中:
https://pkgs.alpinelinux.org/package/v3.9/main/x86/python3
python:3-alpine
图像似乎是基于最新的 Alpine 3.13。所以找不到3.6.9的包。
要安装该特定版本,您必须告诉 apk
使用该 3.9 存储库(如果您不在 Alpine 3.9 上):
apk add python3-dev=3.6.9-r3 --repository=http://dl-cdn.alpinelinux.org/alpine/v3.9/main
但是,有一个问题:python3-dev=3.6.9-r3
与 Alpine 3.9 兼容,并且不能与更高版本的 Alpine 很好地混合。例如:
gdbm-1.19-r0:
conflicts: gdbm-1.13-r1
gdbm-1.13-r1[so:libgdbm_compat.so.4=4.0.0]
satisfies: python3-3.6.9-r3[so:libgdbm_compat.so.4]
libsasl-2.1.27-r10[so:libgdbm.so.6]
python2-2.7.18-r1[so:libgdbm_compat.so.4]
因此,如果您倾向于使用 Python 3.6.9
具体来说,您必须 运行 在 Alpine 3.9 上使用它,它已经很老了。
如果您不介意使用较旧的 Alpine 版本,只需将 Dockerfile 中的第一行替换为:
FROM alpine:3.9