"network_mode" и "networks" нельзя использовать вместе.

В настоящее время я использую tinc для создания 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

Я хотел бы передать этот маршрут своему док-контейнеру на сервере 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" не могут быть объединены


Другими словами, как я могу создать соединение пунктирной линией?

Это также отражает мою проблему в том, что container B не может быть одновременно в обеих сетях.

я добавил Server A просто как более реальный пример роя.

1 ответ

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

Другие вопросы по тегам