Подключение с хоста в Docker
Подключение с компьютера идёт через второй короткий контейнер и имя host.docker.internal, а не через адрес контейнера. На хосте должен быть открыт номер порта сервера, иначе запрос снаружи не дойдёт до базы.
Сервис db на postgres:18
получает пароль demo
и пару портов
5434 снаружи
и 5432 внутри:
services:
db:
image: postgres:18
environment:
POSTGRES_PASSWORD: demo
ports:
- "5434:5432"
Фоновый подъём проекта выполняют так:
docker compose up -d
Отдельная короткая копия
того же образа идёт
на имя host.docker.internal.
Пароль передают переменной
PGPASSWORD,
запись --add-host
и host-gateway
указывают на компьютер.
Числовой адрес контейнера
db здесь не используют:
docker run --rm --add-host=host.docker.internal:host-gateway -e PGPASSWORD=demo postgres:18 psql -h host.docker.internal -p 5434 -U postgres -c "SELECT 1"
Поднимите сервис store с портом 5438 наружу и проверьте короткий запрос с отдельной копии postgres:18 через адрес хоста.
Отметьте, что соединение идёт на опубликованный номер, а не на имя сервиса внутри проекта.