Сетевой мост Docker не работает извне

#docker #jenkins #networking

#docker #дженкинс #сеть

Вопрос:

Я пытаюсь запустить контейнер jenkins. Порт 8080 сопоставлен с хост-портом 80.

docker run -p 80:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts

Я могу свернуть приложение jenkins с хоста, однако я не могу получить доступ к нему извне хоста.

curl localhost:80 работает внутри хоста

но

curl <fqdn or ip address>:80 не работает вне хоста (той же сети, что и хост) и тайм-аута.

Если я установлю —net=host , приведенная выше команда сработает, но я бы не хотел использовать сеть хоста на случай, если мне понадобится добавить дополнительные службы в будущем.

Я думаю, что это не проблема брандмауэра, потому что при настройке сети на хост ссылка работает.

С помощью tcpdump я могу видеть запросы в главном интерфейсе хоста, однако никакие пакеты не пересылаются на интерфейс docker0. Это нормальное поведение?

Что я могу сделать , чтобы решить проблему , чтобы связаться с Дженкинсом за пределами хоста?

Комментарии:

1. что docker ps -a показывает? 0.0.0.0:80->8080/tcp ? можете ли вы попробовать использовать другой порт (а не 80), чтобы убедиться, что он не фильтруется вашей сетью?

2. Да, он показывает 0.0.0.0: 80-> 8080 / tcp. На этот раз я попытался использовать порт 8080. Это дает мне тот же результат: ответ на тайм-аут

3. Это все еще может быть проблемой брандмауэра: при использовании --net=host доступ контролируется INPUT цепочкой, в то время как без нее доступ контролируется FORWARD цепочкой (и правилами в nat таблице). Рассмотрите возможность перезапуска демона docker (что заставит его заново создать все критически важные отсутствующие правила брандмауэра), чтобы посмотреть, повлияет ли это как-либо на ситуацию.

4. Я перезапустил службу с systemctl restart docker помощью . У меня все та же проблема. Есть ли у вас несколько советов о том, как я могу проверить, фильтруются ли запросы ПРЯМОЙ цепочкой?

5. вы используете docker в Windows? если да, то, вероятно, вам нужно настроить свою виртуальную машину для предоставления портов. В противном случае это звучит как проблема с брандмауэром. Другая идея — использовать nginx в качестве шлюза