测试连接到docker守护进程
问题描述:
我正在编写一个将自动启动docker-compose的脚本。测试连接到docker守护进程
但是,有时,在做eval "$(docker-machine env default)"
不会导致码头工人守护进程将立刻连接并在下一行来到(docker-compose up
)我得到Cannot connect to the Docker daemon. Is the docker daemon running on this host?
如果我使用sleep
几秒钟的问题解决了。
有没有办法通过某些系统工具来测试连接到守护进程(检查进程是否存在,是否建立了网络连接,监听端口等)?我想测试码头守护进程外部并且不使用docker
cli
答
Docker Remote API有PING endpoint。您可以使用该端点来检查您是否可以成功连接到Docker守护程序。 docker-machine env
设置环境变量DOCKER_HOST
,因此您可以使用DOCKER_HOST
作为主机进行ping。使用nc
,您可以ping主机如下:
$ eval "$(docker-machine env default)"
$ echo -e "GET /_ping HTTP/1.1\r\n" | nc $DOCKER_HOST
HTTP/1.1 200 OK
Server: Docker/1.10.2 (linux)
Date: Thu, 03 Mar 2016 07:05:58 GMT
Content-Length: 2
Content-Type: text/plain; charset=utf-8
OK
您需要检查返回值。如果它返回'OK',则连接成功。一个简单的检查可能看起来如下(这可能需要更多细化):
#!/bin/bash
if [ "$(echo -e "GET /_ping HTTP/1.1\r\n" | nc $DOCKER_HOST | tail -n 1)" == 'OK' ] ; then
echo "You are connected"
fi