启动systemd脚本后重启后,Docker容器无法启动

时间:2018-04-24 10:14:05

标签: docker systemd reboot docker-container

我有以下systemd脚本:

[Unit]
Description=Hub docker container
After=docker.service

[Service]
User=root
ExecStart=/home/hub/hub.sh
ExecStop=/bin/docker stop hub
ExecStopPost=/bin/docker rm hub

[Install]
WantedBy=multi-user.target

运行命令: systemctl start / stop hub 正常工作。我还使用 systemctl enable hub 创建了符号链接。重新启动整台笔记本电脑后,为什么我的服务没有启动?我按照了docker指南,以便Docker在重新启动时启动,但由于某种原因,我的容器无法启动。我在脚本中遗漏了一个字段吗?

我正在使用我的ExecStart命令,“/ home / hub / hub.sh”脚本是:

docker run --net=host --restart=always --name hub -t hub

重新启动后,当我输入systemctl status hub时,我会得到以下信息:

● hub.service - Hub docker container
   Loaded: loaded (/etc/systemd/system/hub.service; enabled; vendor preset: disabled)
   Active: inactive (dead)

2 个答案:

答案 0 :(得分:2)

就我而言,我已经将容器设置为restart=always(顺便说一句,您可以使用docker inspect -f "{{ .HostConfig.RestartPolicy.Name }}" <container>检查容器的重启策略和/或使用docker update --restart=always <container>进行更改),但是容器仍然直到我运行了docker ps之类的命令,才启动。

事实证明,已在systemd中启用了 socket ,但是 service 本身已被禁用,因此只有在针对它发出命令后才能启动。

>

通过systemctl status进行的检查验证了这一点:

root@poke:~# systemctl status docker.socket
● docker.socket - Docker Socket for the API
   Loaded: loaded (/lib/systemd/system/docker.socket; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-07-30 18:28:38 EDT; 18h ago
   Listen: /var/run/docker.sock (Stream)
    Tasks: 0 (limit: 4647)
   CGroup: /system.slice/docker.socket
   
root@poke:~# systemctl status docker.service
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; disabled; vendor preset: enabled)
   Active: active (running) since Fri 2020-07-31 13:19:53 EDT; 5min ago
     Docs: https://docs.docker.com
 Main PID: 3094 (dockerd)
    Tasks: 20
   CGroup: /system.slice/docker.service
           ├─3094 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
           └─3426 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 6379 -container-ip 172.17.0.3 -container-

(请注意docker.service的“已禁用”,即使当时正在运行。)

我能够通过运行systemctl enable --now docker.service来解决此问题:

root@poke:~# systemctl enable --now docker.service
Synchronizing state of docker.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable docker

非常感谢this reddit user's reply给我的小费。

答案 1 :(得分:0)

要在重新启动后启动容器,您需要将此属性:--restart=always添加到容器启动脚本中。例如: docker run -d -p 80:5000 --restart=always image_name