"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/ например.