我想通过 SSH 远程启动 Docker 容器,然后一旦使用 退出 SSH 命令Ctrl-C
,就停止 Docker 容器。
到目前为止我有这个:
#!/usr/bin/env bash
set -e
docker run --rm alpine sh -c 'while true; do echo; sleep 1; done' &
pid=$!
echo "Ready!"
trap "kill $pid" INT HUP
wait $pid
我通过以下方式启动它:ssh user@host 'cd /some/path && ./start_docker.sh'
问题是,当我使用 终止 SSH 会话时Ctrl-C
,Docker 容器仍然运行,尽管是使用 运行的--rm
。
我需要修改什么才能使终止 SSH 会话时也删除正在运行的 Docker 容器?请注意,我不关心容器本身的正常关闭 — 我只希望命令docker
stoppend 和容器被删除。
答案1
问题是,SIGINT
以这种方式调用 SSH 时,信号实际上并没有发送到脚本。
相反,ssh
使用以下-t
选项运行:
ssh -t user@host 'cd /some/path && ./start_docker.sh'
更多详细信息请访问这个答案。