一个Docker容器的启动脚本

9

我已经有一个正在运行的 Docker 容器了。我进行了一些配置更改,比如在容器内的 /etc/hosts 中添加了一些主机信息。我该如何保存这些更改,以便下次打开容器的交互式 shell 时不必再次执行相同的操作?目前,我已在容器内创建了一个名为 addhosts.sh 的小脚本,并需要每次运行它。

echo "1.2.3.4 server1.example.com gluster1" >> /etc/hosts
echo "5.6.7.8 server2.example.com gluster2" >> /etc/hosts

这是其中一个案例。同样,我需要所有的配置保持完好无损。请不要建议使用Dockerfile,因为我不是在创建镜像,而是进入容器中。
3个回答

8
你可以通过以下方式提交你所做的更改:
快捷命令参考:
docker commit <container id or name>  <repository name>/<your image name>:<tage aka version>

例子:

docker commit c3f279d17e0a  svendowideit/testimage:version3

完整参考资料:

Usage:  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

Create a new image from a container's changes

Options:
  -a, --author string    Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")
  -c, --change value     Apply Dockerfile instruction to the created image (default [])
      --help             Print usage
  -m, --message string   Commit message
  -p, --pause            Pause container during commit (default true)

然后您可以使用docker images查看提交后的新镜像。

要从您的新镜像中运行容器:

docker run -d svendowideit/testimage:version3 <可选启动命令>

另一种方法是通过dockerfile创建自己的镜像,我在这里只是放置它以防我们能够帮助其他人。


感谢您的及时回复。这也适用于已退出的容器吗?因为我的容器已经退出了。我对容器进行了docker commit,然后退出、启动和附加它。但是我没有看到我的配置保持不变。 - jagatjyoti
1
通过运行以下命令:docker start 44372579f2ea docker attach 44372579f2ea - jagatjyoti
你从哪里得到了这个ID 44372579f2ea? - Issam El-atif
你可以提交已退出的容器,我尝试了以下操作:sudo docker run -d debian:jessie /bin/touch /test1 然后检查容器,发现它已经退出。之后我执行了提交操作:sudo docker commit 32f8ea080748 test1/test1:latest 并且使用新提交的镜像启动了一个新的容器:sudo docker run -di test1/test1:latest /bin/bash 我使用 docker exec 命令来检查我的文件:sudo docker exec -it b3b24954e9f1 /bin/ls,我的文件在那里。 - Farhad Farahi
只要你不在它们上面挂载卷,这应该可以工作。 - Farhad Farahi
显示剩余3条评论

4
假设您不希望将更改保存为新图像:
docker exec -it container_id echo "1.2.3.4 server1.example.com gluster1" >> /etc/hosts
docker exec -it container_id echo "5.6.7.8 server2.example.com gluster2" >> /etc/hosts

那将连接到容器,运行命令并退出,而不杀死容器。
请注意以下内容之间的区别:
docker exec -it container_id ... = does not kill the container. 
docker run -it container_id   ...= kills the container 

2
使用 docker commit 命令来对你的容器进行快照。
Usage:  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

Create a new image from a container's changes

Options:
  -a, --author string    Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")
  -c, --change value     Apply Dockerfile instruction to the created image (default [])
      --help             Print usage
  -m, --message string   Commit message
  -p, --pause            Pause container during commit (default true)

示例: docker commit c3f279d17e0a svendowideit/testimage:version3

请参考https://docs.docker.com/engine/reference/commandline/commit/

运行 Docker 容器的快照,请在运行命令中添加版本。例如,运行以下命令:

docker run svendowideit/testimage:version3


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接