docker如何在登录时编写启动容器(ubuntu/systemd)

docker如何在登录时编写启动容器(ubuntu/systemd),ubuntu,docker,docker-compose,systemd,Ubuntu,Docker,Docker Compose,Systemd,我在2个docker-compose.yml文件中引用的多个容器中运行多个服务 /srv/ | +-- docker-openvpn-data/ | | | +-- docker-compose.yml | +-- docker-svenv.nl-data/ | +-- docker-compose.yml 这些docker-compose.yml文件在部署时启动(docker-compose up) 当我的主机重新启动(无人值守升级)时,我的机器不会再次启动容器,当我

我在2个docker-compose.yml文件中引用的多个容器中运行多个服务

/srv/
|
+-- docker-openvpn-data/
|   |
|   +-- docker-compose.yml
|
+-- docker-svenv.nl-data/
    |
    +-- docker-compose.yml
这些docker-compose.yml文件在部署时启动(
docker-compose up

当我的主机重新启动(无人值守升级)时,我的机器不会再次启动容器,当我通过ssh手动启动容器时,所有容器都会立即启动

我的主机运行的是使用systemd的Ubuntu 16.04

  • 什么配置负责从SSH登录开始的容器
  • 我可以将此配置更改为在启动时启动吗

docker守护进程启动时将遵守重新启动策略的设置,因此如果在docker-compose.yml中将容器设置为
restart:always
,它们将在启动时启动(docker守护进程启动时)。(见本页第一节:)

当然,这确实需要运行docker守护进程,而且看起来只有在您登录时才会启动。这可能意味着docker守护进程服务已设置为在您自己的用户会话上启动。您可以使用linger使Ubuntu在启动时生成一个用户会话,从而启动特定于用户的systemd服务,如Docker

此操作的命令是
loginctl enable linger username

从手册页:

enable-linger [USER...], disable-linger [USER...]
    Enable/disable user lingering for one or more users. 
    If enabled for a specific user, a user manager is spawned
    for the user at boot and kept around after logouts. 
    This allows users who are not logged in to run long-running 
    services. Takes one or more user names or numeric UIDs 
    as argument. If no argument is specified, enables/disables 
    lingering for the user of the session of the caller.

不确定这是否有帮助,但请将以下内容放入docker-compose.yml文件中:

所发生的是,当您的compose文件中有这个文件时,它会在引导时启动docker容器。不确定这是否与您的问题相关,因为它不是systemd设置,而是docker设置


希望它能帮助您解决问题。

如果它真的像这样工作,那就是非标准的。询问你的主机提供商。我相信有可能把用户级的systemd东西放在适当的位置。您在
~/.config/systemd/
中有任何内容吗?没有,我在/etc/systemd/system/docker.d/docker.conf中有一个覆盖,但我在没有它的情况下测试了引导,这没有什么区别…在stackoverflow或unix.stackexchange中提问。这个论坛主要面向开发者,而不是运营商。刚刚再次测试,容器/dockerd在登录之前不会启动。我怀疑是某种systemd文件在这样做?听起来systemd docker服务是在您的用户下运行的,而不是在系统范围内运行的。默认情况下,这意味着该服务仅在您登录后运行。根据操作系统的不同,您可以使用类似于
loginctl enable linger username
的方法来确保systemd进程在引导后立即启动。显然,如果您的系统不使用loginctl,这将不起作用,但其他登录服务可能也有相同的选项。感谢您提供的信息,我可以调试并确定用户名吗?systemd和dockerd进程以root用户身份运行,我也以root用户身份登录(是的,我知道,不过是私钥)。我尝试了
loginctl enable linger root
,但运气不好……那一定是其他原因,我不确定如何帮助你。也许你可以问一下服务器故障?这似乎与docker无关。请记住链接是不稳定的,写下答案,这样如果将来链接消失,你的答案仍然有用。