使用CoreOS和Fleet使用数据卷启动映像的问题

时间:2014-10-20 15:39:06

标签: docker coreos

我一直在尝试使用FleetCtl来启动docker图像,一个是数据卷图像,一个是使用--volumes-from选项启动的Nginx图像。 Nginx映像将不会继续在CoreOs服务器上运行,但如果我转到服务器并键入命令docker start,则映像将启动并运行。是否有启动Docker镜像的图像使用Fleet数据卷?

卷的Docker文件:

FROM busybox
MAINTAINER Zombie Possum

VOLUME  ["/usr/share/nginx/html", "/usr/share/nginx/conf"]

COPY dist /usr/share/nginx/html
COPY dist_nginx.conf /usr/share/nginx/conf/dist_nginx.conf

CMD ["/usr/bin/true"]

Fleet File For Volume nginxData.service:

[Unit]
Description=Data Container
Requires=docker.service
After=docker.service

[Service]
TimeoutStartSec=0
KillMode=none
User=core
WorkingDirectory=/home/core
EnvironmentFile=/etc/environment
ExecStartPre=-/usr/bin/docker kill DATA_NGINX
ExecStartPre=-/usr/bin/docker rm DATA_NGINX
ExecStartPre=-/usr/bin/docker pull private_repo/data_nginx:latest
ExecStart=/usr/bin/docker run --name DATA_NGINX private_repo/data_nginx:latest
ExecStop=/usr/bin/docker stop DATA_NGINX

nginx.service的Fleet文件:

[Unit]
Description=Nginx Container
Requires=docker.service
After=docker.service

[Service]
TimeoutStartSec=0
KillMode=none
User=core
WorkingDirectory=/home/core
EnvironmentFile=/etc/environment
ExecStartPre=-/usr/bin/docker kill NGINX
ExecStartPre=-/usr/bin/docker rm NGINX
ExecStartPre=-/usr/bin/docker pull private_repo/nginx:latest
ExecStart=/usr/bin/docker run  -rm -p 80:80 --name NGINX --volumes-from DATA_NGINX private_repo/nginx:latest
ExecStop=/usr/bin/docker stop NGINX

[X-Fleet]
MachineOf=nginxData.service

舰队命令:

fleetctl submit nginxData.service
fleetctl submit nginx.service
fleetctl start nginxData.service
fleetctl start nginx.service

2 个答案:

答案 0 :(得分:0)

您提供的Dockerfile在我的Docker主机上运行时出错(不使用fleet);也许当舰队检测到错误时它会为你移除容器,而在Docker主机上,尽管有错误,容器仍然处于停止状态。

这是错误:

$ docker build --force-rm -t so-26469566 .
$ docker run --name DATA_NGINX so-26469566
exec: "/usr/bin/true": stat /usr/bin/true: no such file or directory2014/10/20 16:59:54 Error response from daemon: Cannot start container 767562758b9f30097a5ed16b98fe818d9c9574bb82b1cfd502bc3403e97d5b0
e: exec: "/usr/bin/true": stat /usr/bin/true: no such file or directory
make: *** [run] Error 1

在Dockerfile中尝试以下CMD语句,看看它是否确实改变了fleet的行为。

CMD ["/bin/true"]

答案 1 :(得分:0)

如果您的nginx.service启动并运行直接在CoreOS服务器中运行docker run命令,可能您的问题不在docker镜像中,而是nginx.service。

请注意,您使用以下命令配置服务:

ExecStartPre=-/usr/bin/docker kill NGINX
ExecStartPre=-/usr/bin/docker rm NGINX

尝试杀死并删除NGINX容器,但是运行带有--rm的容器会在失败或退出时自动将其删除。

也许您的服务无法启动,因为ExecStartPre失败

尝试包含

Requires=nginxData.service
After=nginxData.service