如何在断开 SSH 后终止/停止远程 Docker 容器



我有一个通过SSH访问的远程docker容器。我使用 docker start 命令正常启动容器。

sudo docker start 1db52045d674
sudo docker exec -it 1db52045d674; bash

这会在容器中启动一个交互式 tty,我通过 ssh 访问该容器。 我希望容器在关闭 SSH 连接时自行终止。有没有办法这样做?

每次使用 exit 命令结束终端会话时都会执行.bash_logout

因此,当您退出远程服务器上的 ssh 连接时,您可以使用此文件运行 docker stop 命令。

  1. 如果不存在,请创建 ~/.bash_logout 文件。
  2. 添加以下命令以停止此文件中的 docker 容器。 例:
docker stop container_name

注意:如果用户关闭终端窗口而不是编写 exit 命令,则不会执行此文件。

我希望有一个更优雅的解决方案,但最终我在 ssh 上启动了一个 bash 脚本来捕获 SIGHUP 像这样:

trap 'docker stop CONTAINER_NAME' SIGHUP;
while sleep 5;
do echo "foo";
done;

因此,当操作员关闭SSH连接时,陷阱被触发并且Docker很好地停止

您可以使用--init参数进行初始化。这样,您的容器将能够接管 init 过程,您可以向其发送终止信号:https://docs.docker.com/engine/reference/run/#specify-an-init-process

启动服务器:

docker run --init 
-p 2222:2222 
-e USER_NAME=user 
-e USER_PASSWORD=pass 
-e PASSWORD_ACCESS=true 
-e SUDO_ACCESS=true 
linuxserver/openssh-server

只需在此处注意--init-e SUDO_ACCESS=true参数即可。

在另一个(客户端(外壳中,

  1. SSH 到容器中:
$  ssh user@127.0.0.1 -p 2222 -oStrictHostKeyChecking=accept-new
Warning: Permanently added '[127.0.0.1]:2222' (ECDSA) to the list of known hosts.
user@127.0.0.1's password: 
Welcome to OpenSSH Server

2a. 向PID1发送终止信号(docker-init(:

$ sudo kill -s SIGINT 1
[sudo] password for user: 
$ Connection to 127.0.0.1 closed by remote host.
Connection to 127.0.0.1 closed.

容器不见了。

我希望这有所帮助。

最新更新