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

时间:2017-01-11 18:52:22

标签: 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)。

当我的主机重新启动(无人值守升级)时,我的机器无法再次启动容器,当我手动启动它们时,所有容器都会立即启动。

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

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

2 个答案:

答案 0 :(得分:0)

当守护程序启动时,docker守护程序将遵循重新启动策略的设置,因此如果在docker-compose.yml中将容器设置为restart: always,它们将在启动时启动(当docker守护程序启动时)。 (参见本页第一部分:https://docs.docker.com/engine/admin/host_integration/

当然这需要docker守护进程运行,看起来只有在你登录时才会启动。这可能意味着docker守护程序服务已设置为在您自己的用户会话中启动。您可以使用逗号来使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.

http://manpages.ubuntu.com/manpages/zesty/en/man1/loginctl.1.html

答案 1 :(得分:0)

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

https://docs.docker.com/compose/compose-file/#restart

当你在compose文件中有这个时,它会在启动时启动docker容器。不确定这是否与您的问题有关,因为它不是系统设置而是码头设置。

希望它有所帮助,如果确实如此,它可以解决你的问题。