fri*_*joe 8 python python-3.x docker alpine-linux
当我想构建 Alpine Docker 时,在定义特定的 python 版本时出现错误。
我的 Dockerfile:
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" ]
Run Code Online (Sandbox Code Playgroud)
当我想构建我的 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
Run Code Online (Sandbox Code Playgroud)
val*_*ano 14
apk 的错误是因为在 Alpine 存储库中找不到特定的 Python 3 版本。
python3=3.6.9-r3目前仅存在于 Alpine 3.9main存储库中:
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
Run Code Online (Sandbox Code Playgroud)
然而,有一个问题: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]
Run Code Online (Sandbox Code Playgroud)
因此,如果您倾向于专门使用 Python 3.6.9,则必须在 Alpine 3.9 上运行它,因为它已经很旧了。
如果您不介意使用较旧的 Alpine 版本,只需将 Dockerfile 中的第一行替换为:
FROM alpine:3.9
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18806 次 |
| 最近记录: |