#python #python-3.x #docker #alpine
#python #python-3.x #докер #alpine
Вопрос:
когда я хочу создать свой 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 amp;amp; 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
Ответ №1:
Ошибка из apk заключается в том, что эта конкретная версия Python 3 не найдена в репозиториях Alpine.
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