在 Amazon Linux 上的 Upstart 上运行 Docker 容器不起作用

在 Amazon Linux 上的 Upstart 上运行 Docker 容器不起作用

我正在尝试使用 upstart 让我的容器在启动时运行。

正如教程所说 - 我创建了 /etc/init/nginx_server.conf

description "Nginx docker"
author "Me"
start on filesystem and started docker
stop on runlevel [!2345]
respawn
script
  /usr/bin/docker run -d -p 80:80 test_server
end script

运行最新的 Amazon Linux ( amzn-ami-hvm-2015.03.0.x86_64-gp2)

容器根本没有运行(运行docker ps -a根本没有显示)

答案1

在 Amazon Linux 上,Docker 守护程序使用 init.d 脚本启动,而不是 Upstart 脚本。在 Upstart 脚本中,您尝试在 docker 服务启动时发出启动信号 ( ..started docker)。仅当 docker init 脚本是 Upstart 脚本时,这才会起作用。

您可以添加initctl emit docker-started到 docker init.d 脚本,然后使用该事件触发您的 Upstart 服务配置文件(即start on docker-started

答案2

您无法从 upstart 执行“docker run”,您应该从 docker 镜像创建一个容器,然后在 upstart 中执行“docker start”。如果您检查 /var/log/messages,您可能会看到类似以下内容:

init: test_server main process (6570) terminated with status 1
init: test_server respawning too fast, stopped

要解决此问题,请尝试运行:

docker run -d -p 80:80 test_server

您将获得容器 ID 作为输出:

a64db8e1cca5

然后,输入你的 upstart 文件:

description "Nginx docker"
start on filesystem and started docker
stop on runlevel [!2345]
respawn
script
  /usr/bin/docker start -a a64db8e1cca5
end script

相关内容