Для docker-compose
, использующего мостовую сеть для создания частной сети между контейнерами, принятое решение с использованием docker0
не работает, потому что выходной интерфейс из контейнеров не docker0
, а вместо этого это случайно сгенерированный идентификатор интерфейса, например:
$ ifconfig
br-02d7f5ba5a51: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.32.1 netmask 255.255.240.0 broadcast 192.168.47.255
К сожалению, этот случайный идентификатор непредсказуем и будет меняться каждый раз, когда compose необходимо воссоздавать сеть (например, при перезагрузке хоста). Мое решение - создать частную сеть в известной подсети и настроить iptables
для принятия этого диапазона:
Составьте фрагмент файла:
version: "3.7"
services:
mongodb:
image: mongo:4.2.2
networks:
- mynet
# rest of service config and other services removed for clarity
networks:
mynet:
name: mynet
ipam:
driver: default
config:
- subnet: "192.168.32.0/20"
Вы можете изменить подсеть, если этого требует ваша среда. Я произвольно выбрал 192.168.32.0/20
, используя docker network inspect
, чтобы увидеть, что создается по умолчанию.
Настройте iptables
на хосте, чтобы разрешить частную подсеть в качестве источника:
$ iptables -I INPUT 1 -s 192.168.32.0/20 -j ACCEPT
Это простейшее из возможных iptables
правил. Вы можете добавить другие ограничения, например, по порту назначения. Не забывайте сохранять правила iptables, когда вы довольны их работой.
Этот подход имеет то преимущество, что он воспроизводим и, следовательно, автоматизируем. Я использую модуль ansible template
для развертывания моего файла compose с подстановкой переменных, а затем использую модули iptables
и shell
для настройки и сохранения правил брандмауэра соответственно.
person
Andy Brown
schedule
01.01.2020
curl: (7) Failed to connect to 172.17.1.78 port 7000: No route to host
- person Tri Nguyen   schedule 09.07.2015host.docker.internal
также работает, мне просто нужно добавитьhttp://
перед ним для моих файлов конфигурации Java для URL-адреса. Надеюсь, это кому-то поможет. - person WesternGun   schedule 10.08.2020ip
. Если это контейнер на основе Ubuntu, вы можете сделатьapt-get install iproute2
. - person Xavi Montero   schedule 09.01.2021