Невозможно получить доступ к контейнеру Docker из другого контейнера Docker через IP-адрес хоста

Невозможно получить доступ к контейнеру Docker из другого контейнера Docker через IP-адрес хоста

У меня есть сервер, на котором запущен 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), так как я им все равно не пользуюсь.

Связанный контент