2015-06-16 21 views
3

我只是试验coreOS,码头和舰队。 我有下dockerfile:如何使用dockerfile为船队启动码头工?

FROM ubuntu:14.04 

RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list 
RUN apt-get update 
RUN apt-get -y install nginx 

RUN echo "daemon off;" >> /etc/nginx/nginx.conf 
RUN mkdir /etc/nginx/ssl 
ADD default /etc/nginx/sites-available/default 

EXPOSE 80 

CMD ["nginx"] 

我从这个文件创建映像(“nginx的 - 例如”),我可以启动容器:

docker run -v /home/core/share:/var/www:rw -p 80:80 -d nginx-example 

现在,我要启动它与舰队,所以我承认,我必须创建一个服务文件,然后启动与舰队。

所以我尝试去创造服务文件(nginx1.service):

[Unit] 
Description=MyTry 
After=docker.service 
Requires=docker.service 

[Service] 
TimeoutStartSec=0 
ExecStartPre=-/usr/bin/docker kill nginx 
ExecStartPre=-/usr/bin/docker rm nginx 
ExecStartPre=/usr/bin/docker pull nginx-example 
ExecStart=/usr/bin/docker docker run -p 80:80 -d nginx-example 
ExecStop=/usr/bin/docker stop nginx 

我submmited开始,但是当我做的:

fleetctl list-units 
nginx1.service cbbed2c1.../IP failed  failed 

,我不能运行Web服务器。 我认为问题出在服务文件中,但我不知道如何构建它。 谢谢。

回答

0

下面是你的服务文件中的重点线,应该让你在想:

ExecStartPre=/usr/bin/docker pull nginx-example 

如果你认为是这一形象正在从拉?
为了一个图像,你需要它在某个地方第一。最简单的当然是DockerHub。您将需要创建一个帐户。我将为您创建帐户,存储库和配置身份验证的练习,因为文档很容易获得here

现在,如果您只是尝试docker push nginx-example,它会失败,因为它需要通过标记与您的用户帐户的名称空间关联。为了这个答案,我们假设你的账号是kimberlybf

$ docker tag nginx-example:latest kimberlybf/nginx-example:latest - 这会正确标记您的图片推送到DockerHub。

$ docker push kimberlybf/nginx-example:latest - 这实际上会推动你的形象。该图像将公开,因此不要在您的配置中放置任何敏感数据。

那么你会修改Service,并相应地更换容器标签,还记得给你的容器名称,例如:

[Service] 
TimeoutStartSec=0 
ExecStartPre=-/usr/bin/docker kill nginx 
ExecStartPre=-/usr/bin/docker rm nginx 
ExecStartPre=/usr/bin/docker pull kimberlybf/nginx-example:latest 
ExecStart=/usr/bin/docker docker run -p 80:80 -d --name nginx kimberlybf/nginx-example:latest 
ExecStop=/usr/bin/docker stop nginx 
+0

不直接关系到你的问题,但另一珍闻,可以帮助你解决问题,是。获取日志日志 'journalctl --unit = nginx1.service'会将服务中的日志“拖尾”,所以希望如果启动失败,你应该能够收集到一些clu从那里。 – ebr

+0

谢谢,实际上'journalctl --unit = nginx1.service'帮了我很多。我推我的图像,所以它的工作原理,以及我不得不删除这些行: 'ExecStartPre = -/usr/bin/docker kill nginx ExecStartPre = -/usr/bin/docker rm nginx ExecStop =/usr/bin/docker stop nginx' –

+0

很高兴帮助。尽管如果我正确理解了你的消息,你已经删除了杀死,删除和停止容器的行。你应该保留这些,因为当服务停止时,你希望它优雅地停止,并且当它开始时,你想确保清理旧的滞留容器。虽然当然有不同的用例。 无论如何,如果我的答案似乎正确,请随时将其标记为:)谢谢。 – ebr

1

这工作:

[Service] 
TimeoutStartSec=0 
ExecStartPre=/usr/bin/docker pull kimberlybf/nginx-example:latest 
ExecStart=/usr/bin/docker run -p 80:80 -d --name nginx kimberlybf/nginx-example:latest 

我把我的形象DockerHub