bash - 脚本完成后如何运行 docker 容器并提交更改?

标签 bash docker sh commit

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

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

但是我在第二部分遇到了问题——一旦 sleep 10 命令完成,就提交对图像的更改。有没有办法让我知道 docker 容器何时将被杀死并在它之前运行另一个命令?

编辑:作为替代方案,有没有办法通过容器中的 shell 脚本触发 ctrl-p-q 以使容器保持运行但返回主机?

最佳答案

持久化容器数据有以下几种方式:

  1. Docker 卷

  2. Docker 提交

    a) 从 ubuntu 镜像创建容器并运行 bash 终端。

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

    b) 在终端内安装 curl

       # apt-get update
       # apt-get install curl
    

    c) 退出容器 docker

       # exit
    

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

       $ docker ps -a
    

    e) 将容器保存为新图像

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

    f) 验证您是否可以看到安装了 curl 的新图像。

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

关于bash - 脚本完成后如何运行 docker 容器并提交更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30607569/

相关文章:

bash - 如何使用sed从字符串中提取负数

ruby-on-rails - 在AWS Docker容器中访问Rails控制台

docker - Docker附加延迟

linux - 如何在不重启 Linux 服务器的情况下在 shell 脚本中重新加载环境变量

linux - "set: illegal option -"在一台主机上但不在另一台主机上

bash - `set -x` 导致 bash 打印到哪里?

ruby - shell 脚本 > ruby

batch-file - *.bat 和 *.sh 以及 *.exe 文件有什么区别?

bash - 将键绑定(bind)到读取标准输入的命令

python - 在docker上运行python网站