在Docker 1.10.3的CentOS 7.2机器上,我成功测试了以下内容(以root用户身份运行):

docker run --name usljavadoc_server -p 80:80 -p 443:443 -v /opt/app/uslJavadoc/:/var/www/html/ -d eboraas/apache

可以从容器中运行的apache服务自动部署到“/ opt / app / uslJavadoc”的内容。

因此,我的下一步是使它与systemd一起使用,因此我创建了“/etc/systemd/system/docker-usljavadoc.service”,其内容如下:
[Unit]
Description=Apache serving USL Javadoc
Requires=docker.service
After=docker.service

[Service]
TimeoutStartSec=0
Restart=always
ExecStart=/usr/bin/docker run --name usljavadoc_server -p 80:80 -p 443:443 -v /opt/app/uslJavadoc/:/var/www/html/ -d eboraas/apache
ExecStop=/usr/bin/docker stop -t 2 usljavadoc_server
ExecStopPost=/usr/bin/docker rm -f usljavadoc_server

[Install]
WantedBy=default.target

我手动重新加载了systemd并启动了服务。我验证了另一个盒子上的浏览器可以到达apache进程并获取正确提供的内容。然后,我重新启动以确保它可以在重新启动时工作。仍然有效。

所以,我以为我完成了。但是,当我仔细观察时发现,该服务已成功启动,但启动后立即退出,然后重新启动。这是不断发生的。由于仅提供纯HTML内容(一个Javadoc树),并且该服务立即重新启动,因此用户甚至可能没有注意到存在问题,但是绝对不应该这样做。

有什么想法可以解释为什么该“docker run”可以在shell上正常运行,并且似乎可以从systemd正常启动,但是在几秒钟后立即退出?

最佳答案

从运行命令中删除-d选项。

ExecStart=/usr/bin/docker run --name usljavadoc_server -p 80:80 -p 443:443 -v /opt/app/uslJavadoc/:/var/www/html/ eboraas/apache

docker docs中描述:



ExecStart之后,您的客户端退出。 Systemd会将此视为错误并执行您的ExecStop命令+尝试重新启动(restart=always)

10-07 16:24
查看更多