Alpine Docker определяет конкретную версию python (python3-3.8.7-r0: breaks: world[python3 = 3.6.9-r3])

#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