Docker容器在系统启动后closures

出于某种原因,当使用systemd单元文件时,我的docker容器会立即启动并closures。 我试图find日志,但无法看到为什么发生这种情况的任何迹象。 是否有人知道如何解决这个问题/find显示正在发生的日志?

注意:使用docker start容器名启动后手动启动它们,然后工作(同样在使用systemctl start nginx时)

经过一些挖掘后,我发现这个错误: could not find udev device: No such device它可以做这个?

单位服务文件:

 [Unit] Description=nginx-container Requires=docker.service After=docker.service [Service] Restart=always RestartSec=2 StartLimitInterval=3600 StartLimitBurst=5 TimeoutStartSec=5 ExecStartPre=-/usr/bin/docker kill nginx ExecStartPre=-/usr/bin/docker rm nginx ExecStart=/usr/bin/docker run -i -d -t --restart=no --name nginx -p 80:80 -v /projects/frontend/data/nginx/:/var/www -v /projects/frontend: nginx ExecStop=/usr/bin/docker stop -t 2 nginx [Install] WantedBy=multi-user.target 

Journalctl输出:

 May 28 11:18:15 frontend dockerd[462]: time="2015-05-28T11:18:15Z" level=info msg="-job start(d757f83d4a13f876140ae008da943e8c5c3a0765c1fe5bc4a4e2599b70c30626) = OK (0)" May 28 11:18:15 frontend dockerd[462]: time="2015-05-28T11:18:15Z" level=info msg="POST /v1.18/containers/nginx/stop?t=2" May 28 11:18:15 frontend dockerd[462]: time="2015-05-28T11:18:15Z" level=info msg="+job stop(nginx)" 

Docker日志:空(docker日志nginx)

Systemctl输出:(systemctl status nginx,nginx.service)

 ● nginx.service - nginx-container Loaded: loaded (/etc/systemd/system/multi-user.target.wants/nginx.service) Active: failed (Result: start-limit) since Thu 2015-05-28 11:18:20 UTC; 12min ago Process: 3378 ExecStop=/usr/bin/docker stop -t 2 nginx (code=exited, status=0/SUCCESS) Process: 3281 ExecStart=/usr/bin/docker run -i -d -t --restart=no --name nginx -p 80:80 -v /projects/frontend/data/nginx/:/var/www -v /projects/frontend:/nginx (code=exited, status=0/SUCCESS) Process: 3258 ExecStartPre=/usr/bin/docker rm nginx (code=exited, status=0/SUCCESS) Process: 3246 ExecStartPre=/usr/bin/docker kill nginx (code=exited, status=0/SUCCESS) Main PID: 3281 (code=exited, status=0/SUCCESS) May 28 11:18:20,frontend systemd[1]: nginx.service holdoff time over, scheduling restart. May 28 11:18:20 frontend systemd[1]: start request repeated too quickly for nginx.service May 28 11:18:20 frontend systemd[1]: Failed to start nginx-container. May 28 11:18:20 frontend systemd[1]: Unit nginx.service entered failed state. May 28 11:18:20 frontend systemd[1]: nginx.service failed. 

由于您没有在systemd单元文件中指定Type ,systemd正在使用默认的simple 。 从systemd.service :

如果设置为简单(如果既没有指定Type =也没有指定BusName =,但指定了ExecStart =,则默认设置为),则预期使用ExecStart =configuration的进程是服务的主进程。

这意味着,如果由ExecStart启动的ExecStart退出,systemd将假定您的服务已经退出并将清理所有内容。

因为您使用-d运行docker客户端,所以它会立即退出…因此,systemd会清理服务。

通常,在使用systemd启动容器时, 不会使用-d标志。 这意味着客户端将继续运行,并将允许systemd收集您的应用程序产生的任何输出。

也就是说,在使用systemd启动Docker容器时存在根本性的问题。 由于Docker的运行方式,systemd无法监视容器的状态。 它所能做的只是跟踪Docker 客户端的状态,这不是一回事(客户端可以退出/崩溃/等,而不会影响你的容器)。 这不仅与systemd有关; 任何forms的stream程主pipe(新贵,跑步,主pipe等)都会有同样的问题。