我正在尝试使用docker机器创建的主机上的容器中的docker守护程序。
最初我尝试通过卷装的unix套接字(-v /var/run/docker.sock:/var/run/docker.sock
)连接到主机守护程序,但是仍然失败了:
[root@f57377672f7f docker]# env | grep DOCKER
DOCKER_HOST=unix:///var/run/docker.sock
DOCKER_TLS_VERIFY=1
DOCKER_CERT_PATH=/etc/docker
[root@bd4154b372d5 code]# docker images
An error occurred trying to connect: Get https://%2Fvar%2Frun%2Fdocker.sock/v1.23/images/json: tls: oversized record received with length 20527
即使DOCKER_HOST
为unix://
,我也不确定为什么要尝试通过HTTPS进行连接。
接下来我尝试了tcp://
,但这失败了,因为生成的docker machine生成的TLS证书只能用于主机的外部接口。
# On the host
ubuntu@spot:~$ ps aux | grep 'docker daemon'
root 23678 0.4 0.7 907564 59648 ? Ssl 10:01 1:16 /usr/bin/docker daemon -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --storage-driver aufs --tlsverify --tlscacert /etc/docker/ca.pem --tlscert /etc/docker/server.pem --tlskey /etc/docker/server-key.pem --label provider=amazonec2
# From the container
[root@f57377672f7f docker]# env | grep DOCKER
DOCKER_HOST=tcp://172.17.0.1:2376
DOCKER_TLS_VERIFY=1
DOCKER_CERT_PATH=/etc/docker
[root@f57377672f7f docker]# docker images
An error occurred trying to connect: Get https://172.17.0.1:2376/v1.23/images/json: x509: certificate is valid for 54.165.194.148, not 172.17.0.1
因此,为了从容器连接到主机的守护进程,我需要:
~/.docker/machines/machine/$machine/
复制到容器。DOCKER_HOST
(例如tcp://54.165.194.148:2376
)。 有没有办法解决这个问题,而无需在外部接口上关闭TLS?我也不想为每个必须运行的主机修改容器的Dockerfile
。
答案 0 :(得分:-1)
如果启用了DOCKER_TLS_VERIFY
甚至在环境中设置,则docker客户端仅尝试HTTPS连接。它会尝试将DOCKER_HOST
URI转换为https://
地址。
要允许客户端使用本地套接字而不是HTTPS,您必须先设置DOCKER_TLS_VERIFY
[root@f57377672f7f docker]# unset DOCKER_TLS_VERIFY
docker [command]
适用于unix套接字!