在不使标题过长的情况下,出现以下情况...
我有两个脚本:
第一个脚本(host_startup.sh
)检查网站是否正常运行。最终发布后,它将在默认浏览器中打开网站:
URL=http://localhost:9876
until contents=$(wget -q --spider --no-check-certificate "$URL")
do
sleep 1
done
xdg-open ${URL} &
第二个脚本(run.sh
)启动host_startup
脚本,然后启动Docker容器,该容器在上述地址处提供网页:
(../../host_startup.sh) &
docker run --rm -it \
-p 9786:9786 \
company:image
请注意,docker命令以--rm
标志运行。但是,当我运行run.sh
脚本并按Ctrl + C进行该过程时,Docker映像仍在运行...具体来说,docker ps
仍在显示容器。
我希望Ctrl + C停止容器并清理它。
我认为容器会停止并清理,因为我将host_startup.sh
脚本放在了后台,而不是docker run
命令...
请告诉我如何实现所需的行为。
答案 0 :(得分:1)
显然“ Bash不会将诸如SIGTERM之类的信号转发给它正在等待的进程。”
因此您可以将run.sh修改为:
(../../host_startup.sh) &
exec docker run --rm -it \
-p 9786:9786 \
company:image
将用等待它的docker process替换shell的fork。
基于Suart P. Bentley's answer,基于unix stackexchange
或者,您也可以使用cuonglm's answer的修改版本来手动收听和处理信号,以解决相同的问题。