Dockerizing PostgreSQL - psql Connection отказано
Я играю с Docker, и я хотел бы Dockerize в контейнере Postgres.
Я следую официальному example, но я не могу подключиться к изображению, запущенному с помощью psql.
Я создал Dockerfile с содержимым примера. Я создал изображение из файла Docker и присвоил ему имя. Затем я запускаю контейнер сервера PostgreSQL (на переднем плане).
~/test » docker run --rm -P --name pg_test eg_postgresql
2014-10-10 06:12:43 UTC LOG: database system was interrupted; last known up at 2014-10-10 06:12:29 UTC
2014-10-10 06:12:43 UTC LOG: database system was not properly shut down; automatic recovery in progress
2014-10-10 06:12:43 UTC LOG: redo starts at 0/1782F68
2014-10-10 06:12:43 UTC LOG: record with zero length at 0/1782FA8
2014-10-10 06:12:43 UTC LOG: redo done at 0/1782F68
2014-10-10 06:12:43 UTC LOG: last completed transaction was at log time 2014-10-10 06:12:29.2487+00
2014-10-10 06:12:43 UTC LOG: database system is ready to accept connections
2014-10-10 06:12:43 UTC LOG: autovacuum launcher started
Затем я открою другой терминал, чтобы узнать порт:
~/test » docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
aaedb0479139 eg_postgresql:latest "/usr/lib/postgresql 3 days ago Up 41 seconds 0.0.0.0:49154->5432/tcp pg_test
Поэтому я могу использовать psql для подключения к экземпляру. Но я не могу...
~/test » psql -h localhost -p 49154 -d docker -U docker --password
Password for user docker:
psql: could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 49154?
could not connect to server: Connection refused
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 49154?
could not connect to server: Connection refused
Is the server running on host "localhost" (fe80::1) and accepting
TCP/IP connections on port 49154?
Любая помощь приветствуется.
Ответы
Ответ 1
Запуск этого на моем mac работал у меня:
$ boot2docker ip
The VM Host only interface IP address is: 192.168.59.103
И затем соедините по строкам:
$ psql -h 192.168.59.103 -p 49159 -d docker -U docker --password
Это меньше, чем идеально, чтобы делать все это, но инструкции https://docs.docker.com/installation/mac/ указывают, что это правильное решение, если вы хотите напрямую подключиться от вас mac.
Ответ 2
Если вы добавите параметр -publish в команду запуска docker
docker run --rm -P --publish 127.0.0.1:5432:5432 --name pg_test eg_postgresql
когда вы запустите файл докеров, тогда будет работать следующее (обратите внимание, что порт теперь 5432)
psql -h localhost -p 5432 -d docker -U docker --password
Ответ 3
Решением для меня было просто использовать host.docker.internal
вместо localhost
в строке подключения.
https://github.com/npgsql/Npgsql.EntityFrameworkCore.PostgreSQL/issues/225