Назад | Перейти на главную страницу

Docker: сопоставить порт контейнера с одним IPv6-адресом на хосте

Теперь, когда некоторые из моих серверных приложений упакованы в контейнеры Docker, я пытаюсь развернуть их на своих производственных серверах. Мои контейнеры должны быть доступны по IPv4 и IPv6 одновременно. Обычно это не проблема: если вы сопоставляете порты контейнера с портами хоста, например через docker-compose Docker будет использовать доступные адреса IPv6 и IPv4.

Моя проблема: на моем сервере не только один адрес IPv4 и IPv6, но и несколько. Контейнер моего приложения должен использовать только один конкретный адрес IPv4 и один конкретный IPv6-адрес хоста. Вы можете привязать порт контейнера к IPv4-адресу, используя следующий синтаксис docker-compose:

ports:
    - "127.0.0.1:8001:8001"

(Видеть https://docs.docker.com/compose/compose-file/#ports)

К сожалению, я не смог найти никакой информации, как это сделать с адресами IPv6. Есть ли способ привязать порт контейнера к одному, конкретный IPv6-адрес на моем хосте Docker?

Начиная с версии 1.15 docker-compose (возможно, 1.14) теперь вы можете использовать дополнительные двоеточия в определении порта для IPv6:

version: '3.3'

services:
  app:
    image: nginx
    ports: 
    - "::1:8080:80"

Соответствующий вопрос можно найти здесь: https://github.com/docker/compose/issues/2663

Мое решение - привязать все открытые порты контейнера к 127.0.0.1, а затем перенаправить внешние IP-соединения v4 и v6 через HAProxy на 127.0.0.1. Возможно, это не лучший способ, но решение для меня.