Docker -- 在 docker 提交时仅修改 FROM 值

Docker -- modify only FROM value while docker commit

是否可以在执行docker提交时只修改FROM值?

说我的活动容器是 Ubuntu 16.04,我想用它创建一个图像,但是 Ubuntu 版本应该是 18.04,其余保持不变。

Docker是否支持这种情况?

期待喜欢:docker commit —change=FROM ubuntu:18.04

答案是否定的。您不能使用 docker commit --change=FROM 命令修改基础映像。

--change 选项不支持 FROM 指令。

以下是 docs 的摘录:

The --change option will apply Dockerfile instructions to the image that is created. Supported Dockerfile instructions: CMD|ENTRYPOINT|ENV|EXPOSE|LABEL|ONBUILD|USER|VOLUME|WORKDIR

如果您的容器没有 dockerfile,我建议您使用:

  • docker history命令生成Dockerfile。如前所述 here.

  • 如前所述使用 dfimage utiliyy here

然后更改新生成的 dockerfile 中的 FROM 指令。

这是永远不要使用 docker commit 的有力理由。

如果您有一个基于 commit 的工作流程,您需要 docker run 来自某个基础映像的容器,执行一些步骤,然后提交结果。不过,一旦你完成了这一步,Docker 就不知道中间发生了什么;它只知道有一个图像,一些不透明的文件系统发生了变化,它被要求从中创建一个图像。

假设您使用的是 Ubuntu 的旧版本,并且您想要升级到更新的版本。在基于 commit 的工作流程中,您需要手动完成所有步骤。为了跟踪这一点,您可以写下您要执行的步骤的文本文件:

# `docker run` a container using this base image
FROM ubuntu:18.04
# `docker cp` this file into the image
COPY package.deb /
# Run this command in the container shell
RUN dpkg -i /package.deb
# After committing the image, `docker run` the new image with this command
CMD some_command

不过,该特定格式正是 Docker 文件格式:您可以将其签入源代码管理 运行 docker build,然后取回图像。您的同事也可以这样做,即使他们没有您所做的确切设置,即使他们没有以完全相同的方式键入命令。当您确实需要升级基础映像时,只需将第一行更改为 FROM ubuntu:20.04docker build 即可。