Docker 容器在启用 systemd 脚本后重启后不启动
Docker container doesn't start after reboot with enabling systemd script
我有以下系统脚本:
[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)
为了在重启后启动容器,您需要将此 属性: --restart=always
添加到您的容器启动脚本中。例如:
docker run -d -p 80:5000 --restart=always image_name
就我而言,我已经将容器设置为 restart=always
(顺便说一下,您可以使用 docker inspect -f "{{ .HostConfig.RestartPolicy.Name }}" <container>
检查容器的重启策略 and/or 将其更改为 docker update --restart=always <container>
)但是容器仍然没有启动,直到我 运行 一个像 docker ps
.
这样的命令
原来 socket 在 systemd 中启用了,但是 service 本身被禁用了,所以直到针对它发出了命令。
通过 systemctl status docker.socket
和 systemctl status docker.service
检查验证了这一点:
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 给我的消息。
我有以下系统脚本:
[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)
为了在重启后启动容器,您需要将此 属性: --restart=always
添加到您的容器启动脚本中。例如:
docker run -d -p 80:5000 --restart=always image_name
就我而言,我已经将容器设置为 restart=always
(顺便说一下,您可以使用 docker inspect -f "{{ .HostConfig.RestartPolicy.Name }}" <container>
检查容器的重启策略 and/or 将其更改为 docker update --restart=always <container>
)但是容器仍然没有启动,直到我 运行 一个像 docker ps
.
原来 socket 在 systemd 中启用了,但是 service 本身被禁用了,所以直到针对它发出了命令。
通过 systemctl status docker.socket
和 systemctl status docker.service
检查验证了这一点:
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 给我的消息。