Docker Compose Postgres Контейнерное соединение отказано в хостинге - PullRequest
0 голосов
/ 01 июля 2019

У меня есть следующее определение файла docker-compose с изображением postgres, которое я хочу запустить и подключиться к нему с хостинга компьютера моего компьютера, но я все время получаю Connection Refused localhost:5432. Я понимаю, что контейнер должен быть запущен на сетевом драйвере хоста, но сетевой режим не решает эту проблему. Что я делаю не так?

Я запускаю это с docker-compose -f [file] up на Windows 10 with Docker for Desktop

version: '3.7'
services:
  database:
      image: postgres:10.6
      restart: always
      ports:
        - "5432:5432"
      environment:
        - POSTGRES_USER=postgres
        - POSTGRES_PASSWORD=p0stgr@s
        - POSTGRES_DB=eagle_eye_local
      network_mode: host

Когда я запускаю тот же контейнер с помощью следующей команды, он работает:

docker container run --name postgres10.6 -e POSTGRES_PASSWORD=p0stgr@s -e POSTGRES_USER=postgres -e  POSTGRES_DB=eagle_eye_local -p 5432:5432 postgres:10.6

1 Ответ

1 голос
/ 02 июля 2019

Я предполагаю, что вы не работаете в Linux, а используете Docker для рабочего стола. Тогда краткий ответ: удалите network_mode: host, и настройка compose будет работать так же, как работает ваша команда запуска docker.

version: '3.7'
services:
  database:
      image: postgres:10.6
      restart: always
      ports:
        - "5432:5432"
      environment:
        - POSTGRES_USER=postgres
        - POSTGRES_PASSWORD=p0stgr@s
        - POSTGRES_DB=eagle_eye_local

Два приведенных вами примера на самом деле не равны, хотя они могут привести к некоторым аналогичным результатам при запуске на реальном хосте Linux (аналогично тому, как на хосте Linux вы сможете получить доступ к экземпляру postgres через * 1005). * на хост-машине).

Если вы запускаете указанный файл компоновки в Docker for Desktop (Mac или Windows), вы должны помнить, что в этом случае на ваших контейнерах работает виртуальная машина, и все команды передаются на эту виртуальную машину. Если вы не используете network_mode: host, Docker (1) правильно выставит порт на виртуальной машине и (2) установит некоторый прокси-процесс на хост-компьютере (mac / windows) для перенаправления трафика в виртуальную машину. Это в основном не работает, когда вы запускаете контейнер с network_mode: host.

Вы можете проверить установленное отображение при запуске docker ps в столбце Ports. Это будет пустым, если вы запустите с network_mode: host.

Для получения более подробной информации см. Обсуждения в форуме Docker .

...