Docker容器无法在启动时启动

时间:2014-08-01 10:02:39

标签: startup docker

我正在运行一个EC2实例,其中包含一个在重启时调用的启动脚本。此启动脚本在启动容器之前检查docker守护程序是否正在运行,但是失败并显示错误: Post http:///var/run/docker.sock/v1.13/containers/create: dial unix /var/run/docker.sock: no such file or directory

启动脚本

# Make sure the docker daemon has started
sudo /usr/sbin/service docker start

# start the container
sudo /usr/bin/docker run -d 91b5261e2dc0

请注意,他在ec2实例上,“sudo”不需要输入密码。

Crontab条目:

@reboot /bin/bash /home/ubuntu/start-container.sh 2> /home/ubuntu/cron_errors.log

错误:

start: Job is already running: docker
2014/08/01 09:45:48 Post http:///var/run/docker.sock/v1.13/containers/create: dial unix /var/run/docker.sock: no such file or directory

每当我手动运行启动脚本时,它都能正常工作,这使得它看起来像环境变量/ PATH问题。谷歌搜索到有关未设置DOCKER_HOST的信息,但即使DOCKER_HOST仍未设置,启动脚本也能正常工作。

我需要更改或定义哪些内容才能确保容器在启动时正确启动?

版本控制信息

操作系统:Ubuntu 14.04硬件虚拟化。

Docker版本:

Client version: 1.1.2
Client API version: 1.13
Go version (client): go1.2.1
Git commit (client): d84a070
Server version: 1.1.2
Server API version: 1.13
Go version (server): go1.2.1
Git commit (server): d84a070

uname -a output

Linux ip-10-76-167-92 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

3 个答案:

答案 0 :(得分:4)

"解决方案"最后是在调用启动docker守护进程后进入睡眠状态或等待状态。 E.g

# Make sure the docker daemon has started
sudo /usr/sbin/service docker start

# Wait for the docker daemon to finish starting
sleep 10

# start the container
sudo /usr/bin/docker run -d 91b5261e2dc0

这似乎是因为Chris McKinnel说:

  

...如果您查看/etc/init.d/docker,您会看到   调用start使用--background选项来启动 - 停止 - 守护进程   意味着当它返回时它还在做什么。

为什么不使用&&吗

在调用启动docker守护程序之后,我尝试使用&&对容器的启动进行排队,但是&&只会在前者成功但不会运行下一个命令的情况下运行总是如此(例如,如果docker守护程序已经运行)。 [ref]

答案 1 :(得分:3)

另一种解决方案可能是使用--restart = always选项手动运行此容器:

docker run --restart=always -d 91b5261e2dc0    

docker将在docker启动后运行启动所有此类容器,如果容器将在没有docker stop命令的情况下停止。

答案 2 :(得分:0)

您可以在运行容器之前等待docker socket可用:

# Start the docker daemon
sudo /usr/sbin/service docker start

# Wait for docker socket to become available
while [ ! -e /var/run/docker.sock ]; do sleep 1; done

# start the container
sudo /usr/bin/docker run -d 91b5261e2dc0