docker - 在 docker-compose 中使用 docker:dind
问题描述
所以出于某种原因,我想在 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 上有很多问题,就像这个一样)。在 stackoverflow 上也有一篇关于 gitlab 的类似问题的帖子。
对于我尝试的解决方法:
- 将此值
DOCKER_TLS_CERTDIR: ""
跳跃以关闭 TLS ......但它失败了 - 将版本降级为 docker:18.05-dind。它实际上有效,但我认为这不是一个好的举措。
如果有人有保持 TLS 开启并使其工作的想法,那就太好了
解决方案
要使用禁用 TLS 的 Docker(即默认情况下的 TCP 端口 2375),DOCKER_TLS_CERTDIR
请在 Docker Compose 中取消设置您的 dind 服务定义中的变量,例如:
dind:
image: docker:dind
container_name: dind
privileged: true
expose:
- 2375
environment:
- DOCKER_TLS_CERTDIR=
(注意:不要将其初始化为任何值,例如''
or ""
)
推荐阅读
- mosaic-decisions - 从 COBOL 读取输入文件并引入 Mosaic 平台的项目要求
- excel - 使用 PowerShell 拆分没有单元格公式(链接)的 Excel 工作表
- php - 重音字符使用 curl 显示很奇怪
- javascript - Jquery Ajax 表单提交给 PHP 返回空响应
- css - 在不同的浏览器缩放级别缩放时,边框半径圆失去形状
- python - 将 2d 2 通道 numpy 数组映射到 2d 1 通道 numpy 数组
- python - Super-Linter:将 python 模块作为参数传递给 Azure DevOps 中的 Pylint
- vue.js - 我可以在 GitHub/GitLab 页面上部署 SSR nuxt.js 应用程序吗?
- r - 创建一个循环以从 R 中的数据帧计算值?
- ios - 未从 Amazon Pinpoint 活动传递的推送通知