【发布时间】:2022-06-16 04:22:14
【问题描述】:
我有一个 docker 镜像,它启动了一个容器,用于在很短的时间内执行某些任务。任务完成后立即退出容器。
下面是docker ps -a 命令的输出
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
40be32cb4299 88841cd3d4a7 "/home/test/testing-…" 40 seconds ago Exited (0) 22 seconds ago beautiful_agnesi
由于容器在很短的时间内自动退出,我无法执行docker exec -it -u root 40be32cb4299 bash exec 命令的输出给出以下错误,因为容器已退出。
Error response from daemon: Container 40be32cb4299 is not running
我有没有办法在这个容器上执行 exec 来编辑同一个容器内的一些文件,以便执行 docker commit 并保存为新图像?
【问题讨论】:
-
我不知道您为什么要这样做,但 Docker 的优势之一是您可以在 Dockerfile 中编写镜像构建脚本,这样您就可以轻松更改它并构建一个新图片。当您手动更改容器并将更改的容器提交到新映像时,您会丢失所做操作的记录,并且进行更改变得更加困难。我会考虑这是否是正确的方法,或者我是否可以在 Dockerfile 中编写脚本。
-
您可以使用交互式 shell 基于已有的镜像运行一个新容器;
docker run --rm -it 88841cd3d4a7 sh。根据您的发现,重申@HansKilian 的评论,编辑您的 Dockerfile 并构建一个新映像。docker commit几乎从来都不是最佳实践。
标签: docker docker-compose dockerfile docker-container docker-image