docker运行systemd服务启动,但立即退出,并重新启动,但docker运行从shell工作正常

在我的CentOS 7.2盒子上,使用Docker 1.10.3,我成功testing了以下内容(以root身份运行):

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来处理这个问题,所以我创build了“/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并启动服务。 我validation了另一个盒子上的浏览器可以访问Apache进程,并获得正确的服务内容。 然后我重新启动,以确保它在重新启动时工作。 仍然工作。

所以,我以为我完成了。 但是,当我仔细观察时发现,服务已成功启动,但启动后立即退出,然后重新启动。 这一直在发生。 因为它只是简单的HTML内容(一个javadoc树),并立即重新启动服务,用户可能没有注意到有问题,但它绝对不应该这样做。

任何想法,为什么这个“docker运行”从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文档中描述:

要以独立模式启动容器,可以使用-d = true或者-d选项。 按照devise,当用于运行容器的根进程退出时,容器以分离模式退出。

ExecStart您的客户端退出。 Systemd将看到这是一个错误,并执行您的ExecStop命令+尝试重新启动( restart=always