Я создал 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 не распознает сопоставление портов? Это потому, что он работает из другого контейнера? Что тогда должно быть правильно настроено?