docker 如何升级 python 镜像

老机器上的 python 版本还是 10.1 👇

─➤  docker run -it --rm python:3.10-buster python --version
Python 3.10.1

新机器上的 python 版本是 10.4 👇

─➤  docker run -it --rm python:3.10-buster python --version   
Python 3.10.4

我想把老机器上的 3.10-buster 也变为 10.4

docker 有什么命令可以升级镜像的?

我并不想: 先删除镜像,再拉取镜像。因为删不掉(奇怪的依赖关系)

我希望可以有类似下面的命令来让 docker 自动从 docker hub 升级镜像版本 👇

docker pull python:3.10-buster --upgrade     
阅读 3.7k
2 个回答

重新拉取了一下,发现有更新的,但是却没有更新到最新

原来的

╰─➤  docker run --rm -it python:3.11-buster python --version
Python 3.11.1

重新拉取

╰─➤  docker pull python:3.11-buster                                  
3.11-buster: Pulling from library/python
ac8bb7e1a323: Pull complete 
3b1c264c0ad4: Pull complete 
b1e7e053c9f6: Pull complete 
a2e1e233599c: Pull complete 
0ebfe287e976: Pull complete 
de5c87c207fd: Pull complete 
7d34d7fb27b1: Pull complete 
342382b8cc09: Pull complete 
Digest: sha256:3a19b4d6ce4402d11bb19aa11416e4a262a60a57707a5cda5787a81285df2666
Status: Downloaded newer image for python:3.11-buster
docker.io/library/python:3.11-buster

拉取之后,发现有更新了

╰─➤  docker run --rm -it python:3.11-buster python --version
Python 3.11.4

但是现在是 2023.10.12,Python 3.11.6 都发布了

可能是因为 python:3.11-buster 本身就是没有更新到 3.11.6 吧

图片.png

去 dockerhub 看了一下,确实,buster + 3.11 最后停留在 3.11.4 了

如果需要 3.11.6 可以指定更新的 debian 版本,比如拉取 docker pull python:3.11-bullseye 或者 python:3.11-bookworm

或者直接指明 patch version,比如 python:3.11.6-bullseye 或者 python:3.11.6-bookworm


但不是每次执行 docker pull 都会更新本地镜像的

比如

╰─➤  docker image ls | grep python
python                                                        3.8-bookworm                   d2a527900b6d   6 weeks ago     997MB
python                                                        3.10.11-bullseye               c339f65d6ddf   6 months ago    912MB
python                                                        3.10.10-bullseye               2b8b079d7548   6 months ago    912MB
python                                                        3.11-buster                    4bd1a11e4dc7   8 months ago    905MB
python                                                        <none>                         e9d407238827   10 months ago   893MB
python                                                        3.10-buster                    06132ec49b06   21 months ago   889MB
python                                                        3.10-bullseye                  c05c608cfa20   24 months ago   915MB

我本地的 python:3.10-bullseye 是两年前拉取的,里面是 python3.10.0

╰─➤  docker run --rm -it python:3.10-bullseye python --version 
Python 3.10.0

此时我执行 docker pull python:3.10-bullseye

╰─➤  docker pull python:3.10-bullseye                                                                                                                                                                                                                                                                                127 ↵
3.10-bullseye: Pulling from library/python
Digest: sha256:fc1a412bab02c65978ad1cdc4ad3529d00886c9997d928bb9d6811b1198b72dc
Status: Image is up to date for python:3.10-bullseye
docker.io/library/python:3.10-bullseye

居然和我说,我本地的就已经是最新的了!太离谱了

所以我换了一台机器,换了一台之前没有拉取过 python:3.10-bullseye 的处女机

─➤  docker pull python:3.10-bullseye           
3.10-bullseye: Pulling from library/python
ddf874abf16c: Pull complete 
5c1459d3ab8b: Pull complete 
29ab00e7798a: Pull complete 
7883a473306c: Pull complete 
c3ab175b762c: Pull complete 
9f11cb399571: Pull complete 
cfb416449119: Pull complete 
1365a3c2b71e: Pull complete 
Digest: sha256:e917e3e93525f97fc343135efc2b3295a11b02450ff8d4eeaff25323c73caf6b
Status: Downloaded newer image for python:3.10-bullseye
docker.io/library/python:3.10-bullseye

可以看到,在新的机器上,这个 python:3.10-bullseye 里面的 python 就是最新的 Python 3.10.13

╰─➤  docker run --rm -it python:3.10-bullseye python --version 
Python 3.10.13

python:3.10-bullseye 的问题我解决了

换了一个 docker 镜像源就好了

原来的

{
    "registry-mirrors": [
        "https://hz4anb2p.mirror.aliyuncs.com",
        "https://mirror.ccs.tencentyun.com"
    ],
    "default-address-pools": [
        {
            "base": "172.17.0.0/16",
            "size": 16
        },
        {
            "base": "172.21.0.0/16",
            "size": 24
        },
        {
            "base": "172.22.0.0/16",
            "size": 24
        }
    ]
}

现有的

{
    "registry-mirrors": [
        "https://docker.mirrors.sjtug.sjtu.edu.cn"
    ],
    "default-address-pools": [
        {
            "base": "172.17.0.0/16",
            "size": 16
        },
        {
            "base": "172.21.0.0/16",
            "size": 24
        },
        {
            "base": "172.22.0.0/16",
            "size": 24
        }
    ]
}
只要关注 registry-mirrors 的变化
╰─➤  docker pull python:3.10-bullseye                        
3.10-bullseye: Pulling from library/python
ddf874abf16c: Pull complete 
5c1459d3ab8b: Pull complete 
29ab00e7798a: Pull complete 
7883a473306c: Pull complete 
c3ab175b762c: Pull complete 
9f11cb399571: Pull complete 
cfb416449119: Pull complete 
1365a3c2b71e: Pull complete 
Digest: sha256:2748aa472da6013d989fa015e794d0e76b901ca14efd5c67ce2fb999f0b4dfee
Status: Downloaded newer image for python:3.10-bullseye
docker.io/library/python:3.10-bullseye

这个时候就正常了

╰─➤  docker run --rm -it python:3.10-bullseye python --version
Python 3.10.13

这镜像本身不就分3.10.1、3.10.4么
https://hub.docker.com/_/pyth...
可能你老机器上用的时候3.10.4还没出来吧
不想拉新的 那就进容器手动升级python版本然后commit吧

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏