我正在尝试使用 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