Docker-Compose Postgres 5432 Bind: адрес уже используется ошибка

Хорошо, я искал 3-4 дня и не могу найти решение своей ошибки. Я обнаружил похожие ошибки, и некоторые из них, казалось, описывали мою точную проблему, но ни одно из решений не помогло.

Я пытаюсь запустить и запустить приложение postgres, express, node. Я хочу быть в состоянии бежать docker-compose up -d и пусть он соберет все изображения, тома и т. д. Затем я запущу сценарий bash, который заполнит мои данные из базы данных postgres. Тем не менее, я получаю сообщение об ошибке с портами, которые я использую. Я удалил все свои изображения, контейнеры и даже переустановил докер, но не могу понять. Я удалил все из моего docker-compose, кроме postgres, и он все еще не работает.

version: '3'
  services:
   postgres:
    image: postgres:10.0
    volumes:
      - /var/lib/postgresql/data
    ports:
     - '5432:5432'

Затем на моей хост-машине я просто планирую запустить следующий скрипт bash.

#!/bin/bash

host="postgres.dev"
adminUser="postgres"

psql -h $host -U $adminUser -c "select 1 from pg_database where datname = 'table_name';" | grep -q 1 || psql -h $host -U $adminUser -f ./"$(dirname $0)"/init-local-db.sql

Я знаю, что этот подход должен работать, так как я создаю шаблон после рабочего проекта... который работает для них. Но вот ошибка, которую я получаю:

ERROR: for pg-db  Cannot start service postgres: driver failed programming external connectivity on endpoint pg-db (b3e5697cd563264250479682ec83d4a232d0d4bd679a787ad2089e944dda9e2f): Error starting userland proxy: listen tcp 0.0.0Creating test-api ... done

ERROR: for postgres  Cannot start service postgres: driver failed programming external connectivity on endpoint pg-db (b3e5697cd563264250479682ec83d4a232d0d4bd679a787ad2089e944dda9e2f): Error starting userland proxy: listen tcp 0.0.0.0:5432: bind: address already in use
ERROR: Encountered errors while bringing up the project.

Я знаю, что некоторые люди говорят, чтобы просто изменить номер порта так '5433:5432' но моя проблема в том, что когда вы устанавливаете postgres по умолчанию, его порт равен 5432, и я знаю, что менять его не нужно (потому что рабочий проект этого не делает). Какие-нибудь мысли?

Обновление (на следующее утро):

Ладно, я до сих пор не знаю, почему ошибка возникла в первую очередь, так как я использовал lsof -i tcp:5432 (вместе с netstat), и ничто не подходило для использования этого порта. Я перевел компьютер в режим ожидания и лег спать. Утром я проснулся, изменил свою версию postgres на 9.6, чтобы посмотреть, так ли это, и все заработало. Затем я переключил его обратно на postgres 10.0 и снова все заработало. Надеюсь, он больше не появится снова, но я понятия не имею, почему он появился в первую очередь.

1 ответ

Есть только одна причина, по которой вы можете получить эту ошибку. На вашем локальном компьютере установлен PostgreSQL, и он работает, занимая порт 5432.

У вас есть следующие варианты:

  1. Отключите (и удалите из запуска) PostgreSQL на своем локальном компьютере. - Ваш Docker Compose будет работать.

    sudo service postgresql stop
    
    sudo update-rc.d postgresql disable
    
  2. Используйте другой порт в docker-compose. Нет ничего плохого в применении "5433:5432". Другие сервисы вашего docker-compose будут подключаться к postgres через порт 5432. Со своего локального компьютера вы сможете обращаться к postgres по localhost:5433.

Другие вопросы по тегам