我有一个通过SSH访问的远程docker容器。我使用 docker start 命令正常启动容器。
sudo docker start 1db52045d674
sudo docker exec -it 1db52045d674; bash
这会在容器中启动一个交互式 tty,我通过 ssh 访问该容器。 我希望容器在关闭 SSH 连接时自行终止。有没有办法这样做?
每次使用 exit 命令结束终端会话时都会执行.bash_logout
。
因此,当您退出远程服务器上的 ssh 连接时,您可以使用此文件运行 docker stop 命令。
- 如果不存在,请创建 ~/.bash_logout 文件。
- 添加以下命令以停止此文件中的 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
参数即可。
在另一个(客户端(外壳中,
- 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.
容器不见了。
我希望这有所帮助。