来自python的Alpine Docker镜像:3.x-alpine3.x使用不同于Python的包版本

问题描述 投票:1回答:2

如果我构建基于包含Python的Alpine的最简单的docker镜像:

FROM python:3.7-alpine3.9

我可以成功输入并验证安装的版本是否为3.7:

/ # python --version
Python 3.7.3
/ # python3 --version
Python 3.7.3

但是,如果我安装了一些需要Python3的软件包,例如python3-dev(其他软件包需要)或Python3本身,那么Alpine不使用版本3.7,但由于某些我不明白的原因使用3.6:

/ # apk add python3-dev
(1/3) Installing pkgconf (1.6.0-r0)
(2/3) Installing python3 (3.6.8-r2)
(3/3) Installing python3-dev (3.6.8-r2)
Executing busybox-1.29.3-r10.trigger
OK: 108 MiB in 38 packages

printenv还显示(在docker映像构建期间)使用版本3.7.x但是包系统没有反映这一点。摘抄:

PYTHON_VERSION=3.7.3

我看到here有Python 3.6作为所有Alpine版本的默认版本,最高可达3.9。 Python 3.7仅适用于“边缘”。

我也找到了this的答案,它也不起作用:

# apk add python3 --repository=http://dl-cdn.alpinelinux.org/alpine/edge/main
(1/1) Installing python3 (3.6.8-r2)

安装了Python 3.6。但是,如果我在没有Python FROM alpine:3.9的情况下使用最简单的Alpine并使用相同的命令,则安装Python 3.7:

# apk add python3 --repository=http://dl-cdn.alpinelinux.org/alpine/edge/main
<TRIMMED_TEXT>
(11/11) Installing python3 (3.7.3-r0)

如何告诉python:3.7-alpine3.9中的包管理器使用Python 3.7而不是Python 3.6?

python-3.x docker dockerfile alpine
2个回答
0
投票

如果您事先删除(virtual.python-rundeps包,安装将按预期工作。

FROM python:3.7-alpine3.9

RUN \
    apk update \
    && apk del .python-rundeps \
    && apk add --repository=http://dl-cdn.alpinelinux.org/alpine/edge/main \
        python3-dev=3.7.3-r0

构建此图像会导致:

...
(12/13) Installing python3 (3.7.3-r0)
...

-2
投票

你需要python版本3.7吗?您可以使用版本3.6,它存在:https://hub.docker.com/_/python/?tab=tags&page=3

FROM python:3.6-alpine3.9

要么

FROM python:3.6.8-alpine
FROM python:3.6-alpine
FROM python:3.6.8-alpine3.9
© www.soinside.com 2019 - 2024. All rights reserved.