Как запустить Postgres в Docker-контейнере (WARNING: Host is already in use by another container)
Установил Docker и Docker Compose:

Далее в корне проекта в папке docker создаю файл docker-compose.yml:

Содержимое файла docker-compose.yml:

Далее пытаюсь запустить контейнер, но выпадает ошибка:
Deploying 'Compose: docker'...
docker-compose -f "/mnt/541d54bf-8e57-464d-9e77-b8676fc83fdb/_temp/.../hibernate-app/docker/docker-compose.yml" up -d db
Starting ffea8a86d792_docker_db_1 ...
WARNING: Host is already in use by another container
Starting ffea8a86d792_docker_db_1 ... error
ERROR: for ffea8a86d792_docker_db_1 Cannot start service db: driver failed programming external connectivity on endpoint ffea8a86d792_docker_db_1 (3b0c5cf0437b75725d98b732640a6e2efaa84fdcdad46700f8a7665caae23fae): Error starting userland proxy: listen tcp4 0.0.0.0:5432: bind: address already in use
ERROR: for db Cannot start service db: driver failed programming external connectivity on endpoint ffea8a86d792_docker_db_1 (3b0c5cf0437b75725d98b732640a6e2efaa84fdcdad46700f8a7665caae23fae): Error starting userland proxy: listen tcp4 0.0.0.0:5432: bind: address already in use
ERROR: Encountered errors while bringing up the project.
Failed to deploy 'Compose: docker':
docker-composeprocess finished with exit code 1
Я так понимаю проблема в том, что уже какой-то другой контейнер запущен: "WARNING: Host is already in use by another container". Но я никаких контейнеров больше не запускал.
Также у меня на компе установлен сервер Postgres + десктопный менеджер DBeaver. Может быть это они как-то мешают, я не в курсе. Просто сначала всё сделал по старинке, а сейчас вот пытаюсь с помощью контейнера.
Подскажите, пожалуйста, в чём ошибка? я в Docker новичок....
Ответы (1 шт):
Если у вас на компьютере установлен Postgres и он запущен на 5432, то у вас контейнер на этом же порту не запустится, т.к. порт уже занят, вам нужно либо остановить Postgres, либо поменять мапинг портов в docker-compose.
Например:
...
ports:
- 15432:5432
...
Это приведет к тому, что у вас Postgres внутри контейнера будет запускаться на 5432 (т.е. ваше приложение сможет к нему подключаться по db:5432), а доступен на хост системе будет по 15432.
Также если вы не планируете подключаться к Postgres (контейнер) с хост машини, то маппинг портов, можно вообще убрать, это приведет к тому, что у база будет доступна только внутри сети докера, но не из вне.