我使用 gitlab、gitlab-runner、sonarqube、nexus 等与 docker compose 一起测试构建链,然后在公司服务器上实施它们。这些服务器使用相同的网桥。
这在我的旧 ubuntu 上运行良好,但由于我使用的是 debian,默认桥上的容器无法再连接到 docker compose 桥。
由于这不是docker的运行实例,我该如何禁用docker网络隔离?
答案1
由于您使用的是 Docker compose,因此您需要添加密钥network_mode
并将其设置为"host"
资料来源:docker-compose 文档 来自 ford 的 Stack Overflow 答案
如果需要,你可以--network host
在使用命令时使用该标志docker run
来源:Docker 文档
答案2
这是我发现的。docker iptables 规则如下所示:
$ sudo iptables -vL --line-numbers
Chain FORWARD (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 DOCKER-USER all -- any any anywhere anywhere
2 0 0 DOCKER-ISOLATION-STAGE-1 all -- any any anywhere anywhere
...
Chain DOCKER-ISOLATION-STAGE-1 (1 references)
num pkts bytes target prot opt in out source destination
1 0 0 DOCKER-ISOLATION-STAGE-2 all -- docker0 !docker0 anywhere anywhere
2 0 0 DOCKER-ISOLATION-STAGE-2 all -- myiface0 !myiface0 anywhere anywhere
3 0 0 RETURN all -- any any anywhere anywhere
Chain DOCKER-ISOLATION-STAGE-2 (2 references)
num pkts bytes target prot opt in out source destination
1 0 0 DROP all -- any docker0 anywhere anywhere
2 0 0 DROP all -- any myiface0 anywhere anywhere
3 0 0 RETURN all -- any any anywhere anywhere
Chain DOCKER-USER (1 references)
num pkts bytes target prot opt in out source destination
1 0 0 RETURN all -- any any anywhere anywhere
首先,它检查 DOCKER-USER 链的规则是否允许在 ACCEPT 或 DROP 之间做出决定,然后 Docker 桥之间的每个连接都由 DOCKER-ISOLATION-STAGE-2 链过滤。
我们可以
- 在 DOCKER-USER 链中明确添加 ACCEPT 规则。(如何连接另一个docker网络中的容器?)
- 删除 DOCKER-ISOLATION-STAGE-2 规则:
iptables -t filter -F DOCKER-ISOLATION-STAGE-2
在启动 docker-compose 之前,我以 root 身份创建网络:
#!/bin/bash
if ! docker network ls | grep my-network
then
docker network create \
--driver=bridge \
--subnet=172.18.0.0/16 \
--opt com.docker.network.bridge.name=myiface0 \
my-network
fi
iptables -t filter -F DOCKER-ISOLATION-STAGE-2
在我的docker-compose文件中:
services:
my-gitlab:
networks:
- my-network
...
...
networks:
my-network:
external: true