如何自动化Docker在容器中运行脚本并通知主机完成?

时间:2018-08-14 07:10:11

标签: bash docker docker-compose dockerfile

我想通过以下步骤来自动化应用程序的构建过程:

  1. 启动我的build-system容器,该容器具有用于生成应用程序最终exe的所有依赖项和脚本。
  2. 在构建系统容器内触发一个bash脚本,以启动构建过程。
  3. 构建完成后,通过使用docker cp或在启动容器时附加卷将exe传输到主机。
  4. 将exe转移到新的dist-system容器中,该容器实际上是将存储在Docker集线器中的最终映像。
  5. 将应用程序安装在dist系统中,通过在该容器中触发另一个bash脚本进行自定义配置。
  6. 第5步完成后,回到主机并运行dist-system容器的docker commit,然后将映像从主机docker push从Docker集线器传输到Docker集线器。

我的问题特别涉及第3点和第6点,在这里我需要知道bash脚本已在容器内完成执行。只有这样,我才想在主机中触发docker命令。有没有一种方法可以通知docker在容器内执行bash脚本的情况?

1 个答案:

答案 0 :(得分:2)

docker run是同步的,默认情况下将阻塞直到docker容器退出。

例如,如果build-system Dockerfile如下所示:

FROM alpine:latest

COPY ./build.sh /build.sh

VOLUME /data

CMD ["/build.sh", "/data/test.out"]

使用build.sh如下:

#!/bin/sh

sleep 5
echo "Hello world!" >> "$1"
exit 0 # docker run will exit with this code, you can use this to check if your build was successful

运行docker run --rm -v /your/work/directory/build-output:/data build-system将等待5秒钟,然后退出,并且/your/work/directory/build-output/test.out已创建。