'network_mode' и 'networks' не могут быть объединены в обход - PullRequest
5 голосов
/ 25 апреля 2020

В настоящее время я использую tin c для создания VPN между двумя серверами. Это позволяет мне с сервера A получить доступ к B через IP-адрес 10.0.0.2 и создать интерфейс:

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

Я хотел бы передать этот маршрут в мой docker контейнер на сервер A:

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 голосов
/ 28 апреля 2020

Решение, которое я придумал, вообще не заключалось в использовании tin c и использовании 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 (первое изображение) .

Это означает, что я могу затем перенаправить из контейнера в Server B через http://serverA: например, 3000 .

...