Docker сеть в compose: логика внутреннего URL - PullRequest
0 голосов
/ 05 августа 2020

Я просматриваю следующую документацию: https://docs.docker.com/compose/networking/

, и я не понимаю, почему URL-адрес контейнера с именем db равен postgres://db:5432. Почему имя изображения postgres используется в качестве префикса? Какой будет префикс, если я не использую предустановленное изображение, а собираю из файла докеров?

И почему строка подключения с хост-машины postgres://{DOCKER_IP}:8001? Я думал, что конфигурация

ports:
    - "8001:5432"

будет эквивалентна docker run -p 8001:5432, и в этом случае я всегда мог получить доступ к открытому порту с помощью localhost:8001 или {host_ip}:8001 при доступе с другого компьютера.

1 Ответ

1 голос
/ 05 августа 2020

В этом URL-адресе postgres: - схема URL-адреса; это как https: в https://stackoverflow.com. Это не имеет никакого отношения к имени изображения или даже к деталям запуска в Docker.

Вы правильно понимаете опубликованный ports:, а где во втором примере {DOCKER_IP} - это заполнитель для IP-адреса хост-системы. В некоторых необычных обстоятельствах (в частности, при использовании Docker Toolbox в некоторых системах Windows) это будет не localhost, а адрес виртуальной машины или какой-либо другой системы.

Другой пример, использование среды для укажите URL-адрес службы:

version: '3.8'
services:
  proxy:
    build: ./proxy
    ports: ['8080:80']
    environment:
      - BACKEND_URL=http://backend:3000
  backend:
    build: ./backend
    # ports: ['8081:3000']

Здесь бэкэнд - это обычный HTTP-сервер, а BACKEND_URL - обычный HTTP-URL. Имя службы Compose backend - это хост-часть URL-адреса. Вам не нужно специально публиковать sh ports:, но если вы это делаете, порт для подключения - это номер второй (внутренний контейнер) порт. Вам не нужно объявлять networks:, и Compose создаст для вас сеть default.

...