首页 > 解决方案 > 在 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 的类似问题的帖子

对于我尝试的解决方法:

  1. 将此值DOCKER_TLS_CERTDIR: ""跳跃以关闭 TLS ......但它失败了
  2. 将版本降级为 docker:18.05-dind。它实际上有效,但我认为这不是一个好的举措。

如果有人有保持 TLS 开启并使其工作的想法,那就太好了

标签: dockerdocker-composedocker-in-docker

解决方案


要使用禁用 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 ""


推荐阅读