我正在运行一个EC2实例,并使用启动脚本在重新启动时调用。这个启动脚本会检查Docker守护进程是否正在运行,然后再启动容器,但是出现了以下错误:
请注意,这是在一个不需要输入密码即可使用“sudo”的EC2实例上。 Crontab条目:
每当我手动运行启动脚本时,它都能完美运行,这让我觉得可能是环境变量/路径的问题。在网上搜索时发现有关未设置 DOCKER_HOST 的信息,但即使 DOCKER_HOST 仍未设置,启动脚本也能正常工作。
我需要更改或定义哪些内容以确保容器在启动时正确运行?
版本信息:
操作系统:Ubuntu 14.04 硬件虚拟化。
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
请注意,这是在一个不需要输入密码即可使用“sudo”的EC2实例上。 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
每当我手动运行启动脚本时,它都能完美运行,这让我觉得可能是环境变量/路径的问题。在网上搜索时发现有关未设置 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 输出
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
start-container.sh
的第一条命令后面添加一个wait
命令(或者&&),如果不行,你确定你的cron工作是以root权限运行的吗?尝试使用@reboot root /bin/bash start-container.sh ...
。 - Chris McKinnel&&
怎么样?你实际上是在说“当 Docker 守护进程启动完成后,启动容器”。基本上与等待是一样的。 - Chris McKinnelsudo /usr/sbin/service docker start
命令是非阻塞的,它会立即转到下一行:sudo /usr/bin/docker run -d 91b5261e2dc0
,而守护程序还没有完成启动吗? - Programster/etc/init.d/docker
文件,你会发现调用start
命令时使用了--background
选项来启动start-stop-daemon
,这意味着它在返回时仍在执行一些操作。 - Chris McKinnelsudo /usr/sbin/service "docker" "start" && /usr/bin/docker run -d [IMAGE ID]
这样的命令似乎从来没有运行第二部分。我猜想这是因为 && 只有在前一个命令成功并且 docker 服务已经在运行时才被认为是成功的? - Programster