2016-12-27 79 views
0

在我的CentOS 7.2框,多克尔1.10.3,我试验成功(如根运行)以下:搬运工运行,但立即退出,并重新启动,但是从外壳搬运工运行工作正常

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

自动部署到“/ opt/app/uslJavadoc”的内容可以从运行在容器中的Apache获取。

所以,我的下一个步骤是让这与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树),并且服务立即重新启动,用户可能甚至不会注意到有问题,但它绝对不应该这样做。

任何想法为什么这个“码头运行”从shell中工作正常,似乎从systemd开始罚款,但几秒后立即退出?

回答

1

从您的运行命令中删除-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描述:

要分离模式下启动一个容器,可以使用-d = true或只是-d 选项。按照设计,当用于运行容器的根进程退出时,容器以分离模式退出。

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