Как назначить статический IP-адрес контейнеру Docker
Статические IP-адреса не меняются при остановке и запуске контейнеров или служб, что делает их полезными для постоянной работы в сети. Назначение статических IP-адресов контейнерам Docker — это простой способ сделать их более доступными.
Зачем использовать статический IP?
Есть два вида «статического IP»; частные IP-адреса, используемые для внутренней сети внутри сервера, и общедоступные IP-адреса, используемые для подключения за пределами сервера, часто через Интернет.
Если вам нужно настроить общедоступный IP-адрес для контейнера, вы захотите использовать привязки портов. Вы можете «опубликовать» порты в контейнере Docker, чтобы они были доступны с хоста. Хотя существуют более сложные сетевые настройки, это, безусловно, самый простой и распространенный вариант. Например, привязка порта 80 (HTTP) на хосте к контейнеру NGINX:
docker run --publish=80:8080 nginx
Если вы хотите создать статический частный IP-адрес, вам следует подумать, нужен ли он вам вообще. В большинстве случаев вам понадобится статический IP-адрес для связи с одним контейнером из другого или с хоста. В большинстве случаев встроенная сеть Docker может справиться с этим.
Docker поставляется с сетью по умолчанию, но если вы создадите свою собственную, вы можете давать псевдонимы контейнерам при запуске в этой сети. Этот псевдоним автоматически преобразуется в частный IP-адрес контейнера. Например, контейнер NGINX здесь может получить доступ к экземпляру MongoDB с помощью строки подключения mongodb://mongohost:27017
.
docker network create example docker run --net example --name nginx -d nginx docker network connect example --alias mongohost mongodb
Чтобы узнать больше, вы можете прочитать документацию Docker по пользовательским мостовым сетям.
Однако все еще есть много случаев, когда вы захотите вручную указать частный IP-адрес, например, для доступа к контейнерам непосредственно с хоста. Для этого вам все равно придется использовать собственную сеть Docker, но ее легко настроить.
Настройка статических IP-адресов
Во-первых, вам нужно настроить сеть Docker, и, поскольку нам важен IP-адрес, вам нужно указать фиксированную подсеть:
docker network create --subnet=172.20.0.0/16 customnetwork
Затем вы можете запустить контейнер, указав сеть с флагом --net
и указав IP с флагом -ip
:
docker run --net customnetwork --ip 172.20.0.10 -d container
Вы можете проверить правильность адреса, проверив его в контейнере с помощью exec -t bin/bash
или просмотрев список контейнеров Docker:
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' name_or_id
Использование Docker Compose
Docker Compose — это инструмент, используемый для запуска нескольких контейнеров с предопределенными настройками. Это включает в себя настройку сетей с определенными подсетями, и вы можете прикреплять контейнеры к сетям с фиксированными IP-адресами, используя показанный здесь блок конфигурации ipv4_address
:
version: '2' services: webserver: image: nginx container_name: web-server networks: customnetwork: ipv4_address: 172.20.0.10 networks: customnetwork: ipam: config: - subnet: 172.20.0.0/16