问题描述
在树莓派上安装了Docker,并在根less模式下运行。他有3个使用Docker Compose运行的容器。问题是,当通过SSH登录后,所有容器都会重新启动。登录过程也需要5-10秒的时间,直到提示符出现。奇怪的是,这种情况不是连续发生的,如果在登录尝试之间有10秒左右的间隔,就可以复现。用户还注意到,当使用CTRL + D退出终端时,所有Docker容器都会停止,在树莓派上通过SSH登录后会重新启动。Docker版本:Docker-ce: 5:20.10.21~3-0~debian-bullseye。所有应用程序都有类似的docker-compose文件。
解决方案
请注意以下操作可能因版本差异而有所不同,请谨慎操作。
方案1:解决Docker Rootless模式下容器退出问题
在Docker的Rootless模式下,容器只在用户会话启动时运行。因此,在终止会话后,Docker容器也会停止。为了解决这个问题,您可以启用lingering
,这样会话结束后用户的进程会继续运行。
- 使用以下命令启用
lingering
,其中$UID
将自动替换为您的用户ID:
bash
$ loginctl enable-linger $UID
方案2:检查系统状态和日志
有时容器的异常行为可能与系统状态有关。您可以查看系统的负载、内存使用情况等来寻找问题的线索。
使用以下命令查看系统的负载情况和运行时间:
bash
$ uptime使用以下命令查看Docker的运行状态:
bash
$ systemctl status docker
通过检查系统状态和日志,您可能会找到与容器重启问题相关的线索。
总结
在使用Docker的Rootless模式时,容器的运行状态与用户会话相关。启用lingering
可以让用户的进程在会话结束后继续运行,从而解决容器在SSH登录后重启的问题。同时,检查系统状态和日志可以帮助您找到其他可能影响容器行为的因素。
以上解决方案提供了一种解决容器重启问题的方法,具体取决于您的环境和需求,您可以选择其中之一或结合使用。如果问题仍然存在,您可能需要进一步调查容器的配置和系统环境。