
У меня есть сервер, на котором запущен Wireguard VPN, 10.0.1.254/24
а также Docker, работающий на 172.17.0.1/16
.
Мой docker-compose.yaml
выглядит так (упрощенно):
services:
container_a:
image: nginx:latest
ports:
- '10.0.1.254:80:80'
container_b:
image: alpine:latest
Теперь я могу получить доступ к nginx, используя wget http://10.0.1.254
на хосте. Я также могу получить доступ к нему таким же образом из VPN-пиринга (например 10.0.1.1
). Но когда я пытаюсь сделать это из другого контейнера Docker (например docker compose exec container_b wget http://10.0.1.254
), я получаю таймаут. Однако я могу пинговать хост ( docker compose exec container_b ping 10.0.1.254
).
Я предполагаю, что это как-то связано с тем, как Docker сопоставляет порты на хосте. Но я не могу найти много информации об этом. Кто-нибудь знает, почему это не работает?
решение1
Оказывается, у меня все еще был установлен UFW, который был настроен на разрешение входящего соединения к этому порту на wg0
интерфейсе. Но система была достаточно умна, чтобы использовать ярлык, напрямую с одного виртуального интерфейса Docker на другой, обходя это правило ACCEPT для интерфейса wg0
.
Я выяснил это, используя tail +1f /var/log/ufw.log
, а затем запустив неудавшуюся wget
команду из другого контейнера Docker.
В моем случае решением было просто отключить UFW ( sudo ufw disable
), так как я им все равно не пользуюсь.