【问题标题】:Startup script for a docker containerdocker 容器的启动脚本
【发布时间】:2016-11-18 09:52:45
【问题描述】:

我有一个 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,因为我不是在创建图像,而是我只是进入容器。

【问题讨论】:

    标签: shell docker


    【解决方案1】:

    您可以通过以下方式提交您所做的更改:

    短命令参考:

    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 &lt;optional startup command&gt;

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

    【讨论】:

    • 感谢您的及时回复。它也适用于退出的容器吗?因为我的容器已经退出。我为容器做了 docker commit,然后退出、启动并附加了它。但我看不到我的配置完好无损。
    • 如何启动容器?您应该包括创建的版本。至于例子docker run svendowideit/testimage:version3
    • 在下面运行:docker start 44372579f2eadocker attach 44372579f2ea
    • 你是从哪里得到这个 ID 44372579f2ea 的?
    • 您可以提交退出的容器,我尝试了以下操作: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 for checking my file: sudo docker exec -it b3b24954e9f1 /bin/ls ` 广告我的文件在那里。跨度>
    【解决方案2】:

    假设您不希望将更改保存到新图像中:

    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 
    

    【讨论】:

      【解决方案3】:

      使用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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-16
        • 2020-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-20
        相关资源
        最近更新 更多