Я использую докер на своей машине с Ubuntu 20.10. Я хотел бы использовать docker-compose для настройки нескольких контейнеров в определяемой пользователем сети мостов.
Моя текущая настройка для моего docker_compose.yml
выглядит следующим образом:
version: "3.5"
services:
webserver:
image: httpd
networks:
default:
ipv4_address: 172.16.0.2
networks:
default:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.16.0.0/16
gateway: 172.16.0.1
driver_opts:
com.docker.network.bridge.enable_icc: "true"
com.docker.network.bridge.enable_ip_masquerade: "true"
com.docker.network.bridge.host_binding_ipv4: "0.0.0.0"
com.docker.network.bridge.name: "docker1"
Запуск docker-compose up
работает нормально и создает сеть с контейнером, и если я попытаюсь взаимодействовать с контейнером с хоста:
wget 172.16.0.2
Он работает так, как я ожидал. Однако, когда я пытаюсь добавить еще один контейнер в сеть и пытаюсь подключиться к нему, то есть:
docker run --rm -it --net=test1_default alpine wget 172.16.0.2
Добавленный контейнер не может подключиться. Также стоит отметить, что ни один контейнер в сети не имеет доступа к Интернету.
Я вспомнил, что мог нормально взаимодействовать между контейнерами, которые были добавлены в сетевой мост по умолчанию, поэтому я создал модифицированный docker-compose.yml
просто для проверки:
version: "3.5"
services:
webserver:
image: httpd
network_mode: bridge
Ему был присвоен IP-адрес 172.17.0.2
. Попытка той же команды, что и раньше, в этой сети:
docker run --rm -it --net=bridge alpine wget 172.17.0.2
отлично работает! Я также попытался пропинговать 8.8.8.8
, и контейнеры, похоже, также нормально подключаются к Интернету.
Я не верю, что это проблема с docker-compose при создании мостовой сети, потому что я сталкиваюсь с той же проблемой, если создаю сеть docker вручную и пытаюсь добавить в нее контейнеры.
Любая помощь будет принята с благодарностью. Я также рад предоставить дополнительную информацию о конфигурации хост-системы.
networks:
, сможете ли вы подключиться из другого контейнера, используя что-то вродеdocker run --rm --net=test1_default alpine wget webserver
, используя имя службы Compose в качестве имени хоста? Сеть в Compose немного подробнее описывает общую среду; в терминологии основной сети Docker Compose (v2/v3docker-compose.yml
) всегда использует определяемую пользователем сеть-мост, возможно, автоматически созданную сеть с именемdefault
. - person David Maze   schedule 25.11.2020