Контейнерная сеть

Тип сети, которую использует контейнер, будь то мост, наложение, сеть mac vlan или настраиваемый сетевой плагин, прозрачен внутри контейнера. С точки зрения контейнера у него есть сетевой интерфейс с IP-адресом, шлюзом, таблицей маршрутизации, службами DNS и другими сетевыми данными (при условии, что контейнер не использует сетевой драйвер none). Данный раздел посвящен сетевым проблемам с точки зрения контейнера.

Опубликованные порты

По умолчанию, когда вы создаёте или запускаете контейнер с помощью docker create или docker run, он не публикует ни один из своих портов во внешнем мире. Чтобы сделать порт доступным для служб за пределами Docker или для контейнеров Docker, которые не подключены к сети контейнера, используйте флаг --publish или -p. Это создаёт правило брандмауэра, которое сопоставляет порт контейнера с портом на хосте Docker во внешнем мире. Вот некоторые примеры.

Значение флага

Описание

-p 8080:80

Сопоставляет TCP-порт 80 в контейнере с портом 8080 на узле Docker.

-p 192.168.1.100:8080:80

Сопоставляет TCP-порт 80 в контейнере с портом 8080 на хосте Docker для подключений к хосту с IP-адресом 192.168.1.100.

-p 8080:80/udp

Сопоставляет UDP-порт 80 в контейнере с портом 8080 на узле Docker.

-p 8080:80/tcp -p 8080:80/udp

Сопоставляет TCP-порт 80 в контейнере с TCP-портом 8080 на узле Docker и сопоставляет UDP-порт 80 в контейнере с UDP-портом 8080 на узле Docker.

IP-адрес и имя хоста

По умолчанию контейнеру назначается IP-адрес для каждой сети Docker, к которой он подключается. IP-адрес назначается из пула, назначенного сети, поэтому демон Docker эффективно действует как DHCP-сервер для каждого контейнера. Каждая сеть также имеет маску подсети и шлюз по умолчанию.

Когда контейнер запускается, его можно подключить только к одной сети, используя --network. Однако вы можете подключить работающий контейнер к нескольким сетям, используя docker network connect. Когда вы запускаете контейнер с помощью флага --network, вы можете указывает IP-адрес, назначенный контейнеру в этой сети, с помощью флагов --ip или --ip6.

Когда вы подключаете существующий контейнер к другой сети с помощью docker network connect, вы можете использовать флаги --ip или --ip6 в этой команде, чтобы указывает IP-адрес контейнера в дополнительной сети.

Точно так же имя хоста контейнера по умолчанию является идентификатором контейнера в Docker. Вы можете переопределить имя хоста, используя --hostname. При подключении к существующей сети с использованием docker network connect вы можете использовать флаг --alias, чтобы указывает дополнительный сетевой псевдоним для контейнера в этой сети.

DNS-сервисы

По умолчанию контейнер наследует параметры DNS узла, определённые в файле конфигурации /etc/resolv.conf. Контейнеры, использующие сеть bridge по умолчанию, получают копию этого файла, тогда как контейнеры, использующие пользовательская сеть, используют встроенный DNS-сервер Docker, который перенаправляет внешний поиск DNS на DNS-серверы, настроенные на узле.

Пользовательские хосты, определённые в /etc/hosts, не наследуются. Чтобы передать дополнительные хосты в ваш контейнер, обратитесь к добавить записи в файл containerhostsfile в справочной документации docker run. Вы можете переопределить данные настройки для каждого контейнера отдельно.

Флаг

Описание

--dns

IP-адрес DNS-сервера. Чтобы указывает несколько DNS-серверов, используйте несколько флагов --dns. Если контейнер не может связаться ни с одним из указанных вами IP-адресов, добавляется общедоступный DNS-сервер Google 8.8.8.8, чтобы ваш контейнер мог разрешать интернет-домены.

--dns-search

Домен поиска DNS для поиска неполных имён хостов. Чтобы указывает несколько префиксов поиска DNS, используйте несколько флагов --dns-search.

--dns-opt

Пара ключ-значение, представляющая параметр DNS и его значение. См. документацию вашей операционной системы для resolv.conf для допустимых параметров.

--hostname

Имя хоста, которое контейнер использует для себя. По умолчанию используется идентификатор контейнера, если он не указан.

Прокси сервер

Если вашему контейнеру необходимо использовать прокси-сервер, см. Используйте прокси-сервер.