无法将“ network_mode”和“ networks”组合使用

时间:2020-04-25 18:00:26

标签: docker networking docker-compose docker-swarm tinc

我当前正在使用tinc在两台服务器之间创建VPN。这允许我从服务器A通过IP地址10.0.0.2访问B并创建一个接口:

tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
        inet 10.0.0.1  netmask 255.255.255.0  destination 10.0.0.1
        inet6 fe80::babb:cc53:dd5e:23f8  prefixlen 64  scopeid 0x20<link>
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 500  (UNSPEC)
        RX packets 42  bytes 11987 (11.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 55  bytes 7297 (7.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

我想将此 route 传递到服务器A上的docker容器:

version: '3.2'
services:
  traefik:
    image: "traefik:v2.2.0"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
      - "./acme:/acme"
      - "./traefik.toml:/traefik.toml"
      - "./rules:/etc/traefik/rules"
    networks:
      - traefik
    deploy:
      placement:
        constraints:
          - node.role == manager

networks:
  traefik:
    external: true

目前,在容器traefik中,我可以ping 10.0.0.2,但它完全是另一台主机。

如果我删除:

networks:
  traefik:
    external: true

并在network_mode: host服务中添加traefik,我可以路由到10.0.02,但是随后我无法访问共享traefik网络的其他容器。

如果我尝试将它们放在一起,则会收到错误消息:

“ network_mode”和“ networks”不能组合


换句话说,如何创建虚线连接?

enter image description here

这也描述了我的问题,因为container B不能同时出现在两个网络中。

enter image description here

我添加了Server A,作为一个更真实的群体示例。

1 个答案:

答案 0 :(得分:0)

我想出的解决方案根本不使用tinc,而是使用autossh通过以下命令有效地进行转发:

autossh -M 43585 -o "compression=no" -o "cipher=aes128-gcm@openssh.com" -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -NR 3000:localhost:3000 root@serverA

在服务器B上运行(第一张图片)。

这意味着我可以例如通过http://serverA:3000从容器路由到Server B

相关问题