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

Изоляция контейнеров в docker-compose: как открыть хосту порты с фиксированными адресами из контейнеров в изолированных сетях?

Я пытаюсь создать сеть для создания докеров, в которой набор контейнеров может взаимодействовать изолированно, полностью отключен от сети за пределами хоста, но надежно предоставлять хосту определенные порты этих контейнеров, чтобы они были не на произвольных IP-адресах.

Я пробовал примерно так:

---
version: '3'
services:

  db:
    image: postgres:9.6-alpine
    restart: always
    networks:
      - internal_network
    # Expose postgresql's port to allow dumping to back-up
    ports:
      - "127.0.0.1:5432:5432"

  web:
    image: my-application
    restart: always
    env_file: .env.production
    command: bash -c "bundle exec rails s -p 3000 -b '0.0.0.0'"
    networks:
      - internal_network
    ports:
      - "127.0.0.1:3000:3000"

networks:
  internal_network:
    internal: true

Однако ports Директива, похоже, не действует - по-видимому, она не работает с внутренними сетями.

Если я попытаюсь подключиться к контейнерам с хоста, это сработает, если я знаю их IP-адреса, но их IP-адреса меняются каждый раз, когда docker compose перезапускается.

Я попытался исправить подсеть внутренней_сети с помощью ipam вариант, а затем установить фиксированные IP-адреса для контейнеров с ipv4_address, но затем я получаю эту ошибку:

ERROR: Pool overlaps with other one on this address space

Однако было бы лучше, если бы я мог подключить порты к 127.0.0.1.