如何禁用 Docker 网络隔离?

如何禁用 Docker 网络隔离?

我使用 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-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

相关内容