【发布时间】:2020-10-01 07:57:34
【问题描述】:
因此,出于某种原因,我想在 docker-compose.yml 中使用 docker:dind。 我知道“简单”的方法是直接在映像中安装套接字(例如:/var/run/docker.sock:/var/run/docker.sock)但我想避免这种情况(出于安全原因) .
这是我的实验性 docker-compose.yml :
version: '3.8'
services:
dind:
image: docker:19.03.7-dind
container_name: dind
restart: unless-stopped
privileged: true
environment:
- DOCKER_TLS_CERTDIR=/certs
volumes:
- dind-certs-ca:/certs/ca
- dind-certs-client:/certs/client
networks:
- net
expose:
- 2375
- 5000
volumes:
dind-certs-ca:
dind-certs-client:
networks:
net:
driver: bridge
这里没什么复杂的,那我试试看服务是否设置正确:
docker logs dind
这里没问题,它已启动并运行。 但是,一旦我尝试使用它,例如:
docker run --rm -it --network net --link dind:docker docker version
我收到以下错误:
Cannot connect to the Docker deamon at tcp://docker:2375. Is there a deamon running ?
你知道守护进程为什么没有响应吗?
----------------------------------- - - - - - - 编辑 - - - - - - - - - - - - - - - - - - - --------------------
根据hariK 的评论(顺便感谢一下),我将端口2376 添加到暴露的端口。我想我没有解决我的问题。这是我得到的错误:
error during connect: Get http://docker:2375/v1.40/version dial tcp: lookup on docker on [ip]: no such host
所以我查看了这个错误,发现它似乎是在 dind 版本上经常出现的错误(gitlab 上有很多问题like this one)。 stackoverflow 上还有一篇关于 gitlab here 的类似问题的帖子。
对于我尝试的解决方法:
- 将此值设置为
DOCKER_TLS_CERTDIR: ""跳跃以关闭 TLS ......但它失败了 - 将版本降级为 docker:18.05-dind。它确实有效,但我认为这不是一个好的举措。
如果有人有保持 TLS 开启并使其正常工作的想法,那就太好了 :)(我仍然会自己寻找,但如果您可以通过有趣的链接轻推一下,那就太酷了 ^^)
【问题讨论】:
-
Docker v19 默认在 TLS 上启动,它侦听端口 2376。
标签: docker docker-compose docker-in-docker