Поиск по сайту:

Как назначить статический 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