3

我只是在试验 coreOS、docker 和fleet。我有下一个 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-example”),我可以使用以下命令启动容器:

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

现在,我想用fleet启动它,所以我知道我必须创建一个服务文件,然后用fleet启动它。

所以我尝试创建de服务文件(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

我提交并开始了它,但是当我这样做时:

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

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

4

3 回答 3

1

您不应该以守护进程模式 (-d) 启动容器:

“如果要修改这些单元,请确保不要复制以分离模式 (-d) 启动容器的 docker run 命令。分离模式不会将容器作为单元 pid 的子项启动。这将导致设备运行几秒钟然后退出。”

https://coreos.com/docs/launching-containers/launching/fleet-example-deployment/#service-files

于 2015-06-26T12:08:24.747 回答
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。

于 2015-07-02T21:20:18.170 回答
0

这是您的服务文件中的关键行,应该让您思考:

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

您认为这张图片是从哪里提取的?
为了拉取图像,您需要先将其送到某个地方。当然,最简单的是DockerHub。您将需要创建一个帐户。我将把创建帐户、存储库和配置身份验证的练习留给您,因为文档在这里很容易获得。

现在,如果你只是 try 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
于 2015-06-25T16:27:42.290 回答