докер путаница по поводу порта - PullRequest
1 голос
/ 02 октября 2019

Я создал Docker Postgres контейнер, используя файл compose:

postgres:
  image: postgres:12-alpine
  volumes:
    - ./init.sql:/docker-entrypoint-initdb.d/init.sql
  ports:
    - "5432:5432"

init.sql:

CREATE USER test WITH PASSWORD '123456';
ALTER USER test WITH SUPERUSER;
CREATE DATABASE test;

Я также создал контейнер pgAdmin4, выполнив:

docker pull dpage/pgadmin4
docker run -p 5050:80 \
    -e "PGADMIN_DEFAULT_EMAIL=user@domain.com" \
    -e "PGADMIN_DEFAULT_PASSWORD=SuperSecret" \
    -d dpage/pgadmin4

при настройке соединения в pgAdmin. Мне нужно настроить соединение с сервером на 172.17.0.2, посмотрев на IP-адрес контейнера postgres: docker container inspect 02e83f5f39d6 | grep IPAddress, использование localhost в качестве строки соединения завершится неудачей в pgAdmin4.

Однако, когда я использую python sqlalchemy, я могподключиться к localhost: 5432.

import pandas as pd
from sqlalchemy import create_engine, MetaData

eng = create_engine('postgresql://test:123456@localhost:5432/test', echo=True)
meta = MetaData()
meta.reflect(eng, schema='public')

Это сбивает с толку. Почему pgAdmin не распознает сопоставление портов? Это потому, что он работает из другого контейнера? Что тогда должно быть правильно настроено?

1 Ответ

2 голосов
/ 02 октября 2019

localhost относительно контейнера / хоста.

Для контейнера pgAdmin localhost само по себе. Поэтому вам нужно указать IP, чтобы pgAdmin указывал на правильный хост.

Аналогично для скрипта python, запущенного на вашем компьютере, localhost - это хост-компьютер (ваш ПК). Но так как вы указали отображение порта 5432:5432, порт на localhost:5432 перенаправляется докером на порт 5432 контейнеров postgres. Поэтому, если скрипт подключается к localhost:5432 - он пересылается в контейнер докером.

В этой настройке нет ничего плохого. Лучше было бы иметь контейнер pgAdmin как часть того же файла compose. При этом вы можете использовать имя службы в качестве сопоставления DNS с IP-адресом контейнера для более легкого управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...