Если у меня есть docker-compose, который определяет различные контейнеры в одной или нескольких (внутренних) сетях, процессы внутри контейнеров могут разрешать IPv4-адреса других контейнеров, используя имена, определенные в файле docker-compose.yml.
Например, учитывая это:
version: '3'
services:
db:
image: postgres:9.6-alpine
restart: always
networks:
- internal_network
# this does not work because the network is internal
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
# this does not work because the network is internal
ports:
- "127.0.0.1:3000:3000"
networks:
internal_network:
internal: true
Контейнеры могут преобразовывать имена хостов db
, docker_db_1
, web
и docker_web_1
.
Я хочу иметь возможность подключиться к docker_db_1:5432
и docker_web_1:3000
(или эквивалент) от хоста, независимо от того, какие IPv4-адреса им были назначены, и держать их изолированными от внешней сети с помощью internal: true
флаг.
В port:
привязка подойдет, но для внутренних сетей она, похоже, не работает.
Я бы подумал, что я должен иметь возможность использовать разрешение имен, используемое docker-compose внутри, но, похоже, хост не может этого сделать, и я не могу найти никаких подсказок, как это сделать.
Кто-нибудь знает, почему это так и как это можно обойти?