我通过以下系统文件使用 Fleet 在 CoreOS 上启动 Docker 容器:
[Unit]
Description=Developer News API
After=docker.service
Requires=docker.service
[Service]
ExecStartPre=-/usr/bin/docker kill devnews-core
ExecStartPre=-/usr/bin/docker rm devnews-core
ExecStartPre=/usr/bin/docker pull imjacobclark/devnews-core
ExecStart=/usr/bin/docker run -d -p 1337:1337 --name devnews-core imjacobclark/devnews-core
ExecStop=/usr/bin/docker stop devnews-core
TimeoutStartSec=0
Restart=always
RestartSec=10s
我在这里执行的主要 Docker 命令是
docker run -d -p 1337:1337 --name devnews-core imjacobclark/devnews-core
,当它独立执行时,它可以正常工作,并且具有在端口 1337 上公开的 Web 服务的预期结果。但是,当我执行
fleetctl devnews-core.service
时,Fleet 表示启动已完成,但不断重复启动,这是因为容器内的 npm install
时,Docker 退出。通过 Fleet 启动服务:
core@coreos01 ~/devnews-coreos/fleet $ fleetctl start devnews-core.service
Unit devnews-core.service launched on 8fdc9312.../
日志:
core@coreos01 ~/devnews-coreos/fleet $ fleetctl --tunnel journal devnews-core.service
-- Logs begin at Wed 2015-02-25 13:41:25 UTC, end at Wed 2015-02-25 23:08:55 UTC. --
Feb 25 23:08:47 coreos03 docker[6404]: 44d8123e3829: Download complete
Feb 25 23:08:47 coreos03 docker[6404]: 1e278393641a: Download complete
Feb 25 23:08:47 coreos03 docker[6404]: ec0fa4f2b126: Download complete
Feb 25 23:08:47 coreos03 docker[6404]: 0d98c76d34ce: Download complete
Feb 25 23:08:47 coreos03 docker[6404]: eb0a99f0e308: Download complete
Feb 25 23:08:47 coreos03 docker[6404]: eb0a99f0e308: Download complete
Feb 25 23:08:47 coreos03 docker[6404]: Status: Image is up to date for imjacobclark/devnews-core:latest
Feb 25 23:08:47 coreos03 systemd[1]: Started Developer News API.
Feb 25 23:08:47 coreos03 docker[6414]: 1d90cf825518610cbd15a44873c1e2640d40522632ed5417ac91f22b82c20ac4
Feb 25 23:08:47 coreos03 docker[6456]: devnews-core
说明 Docker 失败的 Node :
core@coreos03 ~ $ docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a5970b9f6819 imjacobclark/devnews-core:latest "npm start" 6 seconds ago Exited (143) 5 seconds ago devnews-core
这个容器简单地由公共(public) DockerHub 注册表中的标准 Docker Node.js 容器构建,并在我将我的应用程序构建到容器中后提交。
我是否遗漏了我的服务文件中的任何重要内容,导致 Fleet 无法正确启动容器?
最佳答案
答案很简单,不要以妖化模式启动Docker,正确的系统文件应该如下:
[Unit]
Description=Developer News API
After=docker.service
Requires=docker.service
[Service]
ExecStartPre=-/usr/bin/docker kill devnews-core
ExecStartPre=-/usr/bin/docker rm devnews-core
ExecStartPre=/usr/bin/docker pull imjacobclark/devnews-core
ExecStart=/usr/bin/docker run -p 1337:1337 --name devnews-core imjacobclark/devnews-core
ExecStop=/usr/bin/docker stop devnews-core
TimeoutStartSec=0
Restart=always
RestartSec=10s
本质上,Docker 运行命令应该如下:
docker run -p 1337:1337 --name devnews-core imjacobclark/devnews-core
关于node.js - 使用 Fleet 启动时 Docker 容器退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28731400/