当前位置: 首页 > 知识库问答 >
问题:

Docker容器在重新启动并启用systemd脚本后不会启动

方宜
2023-03-14

我有以下系统脚本:

[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启用集线器创建了符号链接。为什么我的服务在我重新启动整个笔记本电脑后没有启动?我遵循了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个答案

岳浩宕
2023-03-14

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

邢鸿博
2023-03-14

在我的例子中,我已经将容器设置为restart=always(顺便说一句,您可以使用docker inspect-f“{{.HostConfig.RestartPolicy.Name}”检查容器的重启策略

事实证明,套接字在systemd中已启用,但服务本身已被禁用,因此在对其发出命令之前不会启动。

通过systemctl statusdocker.socketsystemctl 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——现在是docker来解决这个问题。服务

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

非常感谢这个reddit用户的回复给我的消息。

 类似资料:
  • 我希望容器在计算机重新启动后自动启动,所以我使用'--restart=always'标志,但它并没有像我预期的那样运行。当我重新启动系统时,容器没有启动。 docker日志信息 添加docker ps-a message,$docker ps-a CONTAINER ID IMAGE命令CREATED STATUS PORTS NAMES a1f4d5471b0a mysql:8.0“docker

  • 我今天使用应用程序容器/媒体维基泊出程序映像部署了MediaWiki的一个实例,我现在遇到了一个新问题,我找不到任何线索。尝试使用以下命令附加到媒体维基前端容器后: 由于我忽略的原因,它在我的配置中回答< code >终止,并尝试: 我确实收到了一些接近错误消息的内容: 这是我的新问题,因为这个容器永远不会停止重新启动。我可以看到,使用<code>docker ps-a。 问题是,我能够停止容器(

  • 我有一个服务,我正在通过Rancher通过Docker-Compose提出。我遇到的问题是需要在容器部署后设置密码。

  • 问题内容: 假设重新启动操作系统时,通过init.d或类似systemd的进程自动重启了Docker守护进程,那么重启一个或多个Docker容器的首选方式是什么?例如,我可能在反向代理或数据库服务器后面有许多Web服务器。 问题答案: CoreOS使用systemd来管理长期运行的服务: https://coreos.com/os/docs/latest/getting-started-with-

  • docker守护进程在我的计算机(Linux/Centos 7)上不再启动了,我强烈怀疑在这种情况下是一个设置为自动重启的容器造成的。如果我手动启动守护进程,我看到的最后一行是“装载容器:启动”,然后它只是挂起。 我想做的是在不启动任何容器的情况下启动守护进程。但我找不到任何选择。在docker中是否有任何选项可以启动守护进程而不将启动容器设置为自动重启?如果没有,是否有一种方法可以手动移除容器,

  • 问题内容: 我使用以下命令创建了容器: 以下是命令: 真的没有太多要说的,我希望容器能启动并保持正常运行。这是日志: 问题答案: 您正在尝试运行,它是需要tty 才能运行的交互式外壳。使用,在“分离”模式下运行此命令实际上没有任何意义,但是您可以通过添加到命令行来做到这一点,以确保容器具有与其关联的有效tty并保持连接状态: 在启动分离的容器时,您通常会运行某种长期存在的非交互式进程(例如,或We