node.js - 使用 Fleet 启动时 Docker 容器退出

标签 node.js docker containers coreos

我通过以下系统文件使用 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/

相关文章:

node.js - 如何使用 Telegraf API 监控 channel 上的新帖子?

javascript - 脚本src通过nodejs+express变成jade中的url

ssl - 如何在 GKE 上的 RabbitMQ UI 管理中添加 SSL?

linux - kernel.h中的这段代码是什么意思?

c++ - 'iterator' 可以只输入子类 'const_iterator' 吗?

node.js - 逐行解析生成的node.js子进程的输出

从缓冲区到 JSON 的 Javascript

Gluster 的 Dockerfile ... 创建容器时无法启动服务

macos - 如何在 Mac 上使用 JetBrains Rider 开发和调试运行到 Docker 中的 .NET Core 应用程序

docker - 自动将容器映射到 docker 主机的/etc/hosts,每个容器使用相同的端口