我刚刚用一个镜像设置了一个 Docker 容器ubuntu:latest
。根据/etc/lsb-release
Ubuntu 14.04 的说法,这个镜像是这样的。现在我想将容器中的系统升级到 Ubuntu 16.04。因此,我已经安装了该update-manager-core
软件包。但是,当我运行 时do-release-upgrade
,我只收到以下输出:
root@container:~# do-release-upgrade
Checking for a new Ubuntu release
No new release found
为什么现在不起作用? 它会在某个时候起作用吗? 将容器从 Ubuntu 版本 14.04 升级到 16.04 最方便的方法是什么? 除了使用 Ubuntu 16.04 创建新容器并将所有数据从旧容器复制到新容器之外,我还有其他可能性吗?
答案1
需要说明的是,在镜像内部更新镜像并不是 Docker 的最佳实践,建议您使用 Dockerfile 从更新的源启动新镜像,并在通过测试后启用该镜像,然后停用旧镜像。最终,您会希望拥有无法在镜像内部更新的生产镜像。不过,Docker 非常灵活,您可以随意使用它。
虽然上述内容看起来有些夸张,但这背后是有原因的:Docker 的主要目的是强制您的团队记录可重复的镜像创建指令,而强制他们根据 Dockerfile 执行操作可确保您不会被设置它的开发人员的知识所束缚,并且您使用的是稳定、更有信誉的来源。
答案2
do-release-upgrade -d
是你的朋友 :)
LTS 版本直到第一个点发布(通常在六月或七月左右)才会提供更新。
至少我认为这就是问题所在。我刚刚用这种方法将几台 Trusty 机器升级到了 Xenial。我不明白为什么在 Docker 下会有所不同,但如果有的话,请告诉我们。