我在 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 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