Я пытаюсь создать сеть для создания докеров, в которой набор контейнеров может взаимодействовать изолированно, полностью отключен от сети за пределами хоста, но надежно предоставлять хосту определенные порты этих контейнеров, чтобы они были не на произвольных 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.