我怎样才能运行一个docker容器,并提交脚本完成后的变化?

我想设置一个cron作业来在Docker容器中运行一组命令,然后将更改提交到Docker镜像。 我可以运行容器作为守护进程,并使用此命令获取容器ID:

CONTAINER_ID=$(sudo docker run -d my-image /bin/sh -c "sleep 10")

但是我在第二部分遇到了麻烦 – 一旦sleep 10命令完成,就会对图像进行更改。 有没有一种方法可以告诉我什么时候docker集装箱将要被杀死,然后再运行另一个命令呢?

编辑:作为替代,有没有办法通过在容器中的shell脚本来触发ctrl-pq离开容器运行,但返回到主机?

在前台运行它,而不是守护进程。 当它结束时,启动它的脚本需要控制并提交/推送它

有以下几种方法来保存容器数据:

  1. Docker卷

  2. Docker提交

    a)从Ubuntu映像创build容器并运行bashterminal。

      $ docker run -i -t ubuntu:14.04 /bin/bash 

    b)在terminal内部安装curl

      # apt-get update # apt-get install curl 

    c)离开集装箱docker

      # exit 

    d)通过执行以下命令logging您的容器ID:

      $ docker ps -a 

    e)将容器保存为新图像

      $ docker commit <container_id> new_image_name:tag_name(optional) 

    f)validation你可以看到你的新卷像安装。

      $ docker images $ docker run -it new_image_name:tag_name bash # which curl /usr/bin/curl 

如果你想要一个正在运行的所有的自动提交,试试这个。 把这个放在一个cron中,如果这有帮助的话

 #!/bin/bash for i in `docker ps|tail -n +2|awk '{print $1}'`; do docker commit -m "commit new change" $i; done