【发布时间】:2018-05-09 16:20:36
【问题描述】:
我有一个启动多个容器的 docker-compose.yml。 其中之一使用 Dockerimage 文件来安装该容器中所需的一切。
我想添加一个每次等待中断信号 0、9 和 137 时运行的脚本。
现在,我正在尝试将脚本作为 Dockerimage 文件中的入口点运行,但似乎不起作用。
这是 Dockerimage 文件的内容:
RUN apt-get update && [...]
WORKDIR "/application"
ENTRYPOINT ["/bin/bash", "-c", "/application/scripts/cl.sh"]
我做错了吗?需要用下面的命令重建容器吗?
docker-compose build
这是 bash 脚本 cl.sh 的内容
#!/bin/bash
echo "HELLO HELLO HELLO HELLO"
trap 'echo "Exiting with a 137 signal."' 137 0 9
目前脚本的唯一目的是测试一切是否正常。
【问题讨论】:
-
请附上minimal reproducible example,包括你用来发送信号的shell脚本和命令/方法。问题很可能是您作为 pid 1 包含的额外 /bin/bash 进程,但我想在发布答案之前对此进行测试。
-
@BMitch 我按原样添加了脚本内容。如您所见,它只是为了测试它与 Docker 系统的连接是否正常工作。
-
您的容器是否仍在运行以捕获信号?定义陷阱后,您的脚本会立即结束,这将结束容器。
-
我没有测试你的整个例子,但是关于你的 Dockerfile 的
ENTRYPOINT命令,bash 选项-c是题外话,应该删除,因为这个选项专用于传递内联代码到 bash,不用于运行外部脚本。 -
酷!现在正在工作,但正如您所说,容器在脚本运行时停止。知道如何捕捉中断信号吗?这个想法是在容器停止之前运行备份。
标签: bash docker docker-compose dockerfile