如何使用专用的 daemon.json 配置文件执行 docker::dind docker 映像

问题描述 投票:0回答:1

我在 docker compose 中有以下内容来启动我的 docker:dind 服务

  dind:
    image: docker:dind
    container_name: dind
    privileged: true
    command: ['dockerd', '--iptables=false', '--config-file=/etc/docker/daemon.json']
    networks:
      isolated_network:
        ipv4_address: 172.16.0.4
    restart: always
    hostname: 'Dindy'
    volumes:
      - ./volumes/dind/config:/etc/docker
      - ./volumes/dind/var/lib/docker:/var/lib/docker

这对我有用,但并不完美。我必须首先通过创建

volume/dind/config/daemon.json
来配置服务。这感觉不像预期的方式。

所以我尝试使用 docker 文件进行构建并将守护进程复制到其中。

FROM docker:dind
RUN mkdir /etc/docker
COPY ./daemon.json /etc/docker

在删除

./volumes/dind/config:/etc/docker
文件中的映射
docker-compose.json
后即可工作,否则
docker logs dind
会显示:

unable to configure the Docker daemon with file /etc/docker/daemon.json: open /etc/docker/daemon.json: no such file or directory

丢失的卷映射没关系,我不再需要它了。我仍然很困惑为什么我需要删除它。

无论如何,我必须通过

Dockerfile
创建一个新图像才能复制我的
daemon.json
文件。否则我必须使用
daemon.json
文件填充卷目录。

其他建议如何解决这个问题?

更新也许这个解决方案是最好的?发帖后才发现。

docker docker-compose dockerfile docker-in-docker
1个回答
0
投票

我在 docker compose 中找到了一个 configs 命令,它可以满足我的需要。 请参阅此处的文档

所以我的 docker-compose.yml(

dind
服务)现在看起来像这样,请注意新的
configs:
部分:

  dind:
    image: docker:dind
    container_name: dind
    privileged: true
    command: ['dockerd', '--iptables=false', '--config-file=/etc/docker/daemon.json']
    networks:
      isolated_gitlab:
        ipv4_address: 172.16.0.4
    restart: always
    hostname: 'gitlab-dind'
    configs:
      - source: dind_daemon_json
        target: /etc/docker/daemon.json
    volumes:
      - ./volumes/dind/var/lib/docker:/var/lib/docker
. . . 
configs:
  dind_daemon_json:
    file: ./context/dind/daemon.json
© www.soinside.com 2019 - 2024. All rights reserved.