如何在Docker Machine配置的主机上运行的容器中使用docker守护程序?

时间:2016-06-20 14:16:36

标签: docker docker-machine

我正在尝试使用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_HOSTunix://,我也不确定为什么要尝试通过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

因此,为了从容器连接到主机的守护进程,我需要:

  1. 在构建时将证书从我的本地~/.docker/machines/machine/$machine/复制到容器。
  2. 在构建时,也将该主机的外部IP硬连接为容器DOCKER_HOST(例如tcp://54.165.194.148:2376)。
  3. 有没有办法解决这个问题,而无需在外部接口上关闭TLS?我也不想为每个必须运行的主机修改容器的Dockerfile

1 个答案:

答案 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套接字!