Подключение с хоста в Docker
Подключение с хоста идёт на опубликованный порт компьютера, а не внутрь сети контейнера. Клиент снаружи не знает внутренний адрес сервиса и стучится туда, куда проброшен номер порта.
Сервис db на mongo:8.3
получает пару портов
27017 без пароля
при старте:
services:
db:
image: mongo:8.3
ports:
- "27017:27017"
После фонового подъёма проекта отдельная короткая копия клиента достаёт опубликованный порт через адрес компьютера:
docker compose up -d
Проверка с образа
mongo:8.3 идёт
на имя host.docker.internal
и порт 27017.
Имя host.docker.internal
с записью --add-host
и host-gateway указывает
на компьютер, где открыт порт.
Запрос проходит, когда сервер
уже слушает снаружи:
docker run --rm --add-host=host.docker.internal:host-gateway mongo:8.3 mongosh --quiet --host host.docker.internal --port 27017 --eval "db.runCommand({ ping: 1 })"
Поднимите сервис db с портом 27019 наружу и проверьте живость сервера с отдельной копии mongo:8.3 через адрес хоста.
Отметьте, что соединение идёт на опубликованный номер, а не на имя сервиса внутри проекта.