docker容器的启动脚本

时间:2016-11-18 09:52:45

标签: shell docker

我有一个已经运行的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 个答案:

答案 0 :(得分: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 <optional startup command>

另一种方法是通过以下方式创建自己的图片:dockerfile,我只是把它放在这里,只是因为我们可以帮助别人。

答案 1 :(得分: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 :(得分: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)

Example: docker commit c3f279d17e0a svendowideit/testimage:version3

请查看https://docs.docker.com/engine/reference/commandline/commit/

要停靠Docker容器的运行快照,请添加要运行的版本命令。至于示例运行

docker run svendowideit/testimage:version3