我正在运行一个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
答案 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