最近经常遇到服务器docker容器异常关闭的情况,导致VSCode无法通过remote-ssh连接到docker,在此记录一下解决方案。
参考链接:
docker容器内服务开机自启动实现方案(以ssh服务为例)
设置docker容器开机自启动
docker update --restart=always 容器名
设置ssh自启动
笔者在这一步遇到了一些问题,由于创建容器时使用的命令类似:
docker run ... /bin/zsh
使用的不是默认的shell bash而是zsh(oh-my-zsh,同样是一种shell命令行工具),因此解决方案稍微和参考链接中的不一样。
- 在 /root 目录下新建一个 start_ssh.sh文件,赋予该文件可执行权限:
touch /root/start_ssh.sh
chmod +x /root/start_ssh.sh
vim /root/start_ssh.sh
,将以下内容粘贴到/root/start_ssh.sh中:
#!/bin/bash
LOGTIME=$(date "+%Y-%m-%d %H:%M:%S")
echo "[$LOGTIME] startup run..." >>/root/start_ssh.log
service ssh start >>/root/start_ssh.log
- 如果默认的shell是bash,则执行
vim /root/.bashrc
,本机使用的shell是zsh,因此输入vim /root/.zshrc
,在文件末尾添加:
# startup run
if [ -f /root/start_ssh.sh ]; then
. /root/start_ssh.sh
fi
因为容器创建时会执行/bin/bash或/bin/zsh命令,所以ssh服务通过第二步创建的脚本也被启动起来了。