如何从外部主机连接到使用 docker-compose 创建的 postgres
How to connect to postgres created with docker-compose from outside host
我觉得这个问题应该很容易解决,但是我正在拔头发。我有以下 docker-compose:
version: "3"
services:
pg-db:
image: postgres:11
environment:
POSTGRES_PASSWORD: "postgres"
POSTGRES_USER: "postgres"
POSTGRES_DB: "postgres"
ports:
- 5432:5432
#network_mode: host
然后我 运行 docker-compose up
它启动了容器
pg-db_1_78e7ec4a95e6 | 2020-02-21 13:53:53.928 UTC [1] LOG: database system is ready to accept connections
我可以用 docker exec
连接到它
docker exec -it docker_pg-db-compose_1_78e7ec4a95e6 psql -h pg-db -U postgres postgres
但我无法通过 'naked' psql:
连接到它
psql postgresql://postgres:postgres@localhost:5432/postgres
psql: could not connect to server: Connection refused
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
psql postgresql://postgres:postgres@pg-dg:5432/postgres
psql: could not translate host name "pg-db" to address: Name or service not known
我试过 network_mode
但没用。
启动docker-compose后,需要获取docker容器ip,方法如下:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
然后你可以postgresql://postgres:postgres@<container idp>:5432/postgres
你应该可以连接到它
我正在使用 Postgres DockerHub page 中提供的 docker-compose
文件的修改版本。
version: '3.1'
services:
db:
image: postgres:11
restart: always
ports:
- 5432:5432
environment:
POSTGRES_PASSWORD: postgres
当我 运行 docker-compose up
我收到一个非常相似的 "ready" 消息:
db_1 | 2020-02-21 14:34:17.826 UTC [1] LOG: database system is ready to accept connections
此时,我可以使用 psql 连接到 Postgres。
$ psql -h localhost -U postgres
Password for user postgres:
psql (12.2, server 11.7 (Debian 11.7-1.pgdg90+1))
Type "help" for help.
postgres=#
我也可以使用您提供的连接字符串和 postico 进行连接:
差异很细微,我不确定 restart 政策在这里是否有任何不同,但请尝试一下。
我觉得这个问题应该很容易解决,但是我正在拔头发。我有以下 docker-compose:
version: "3"
services:
pg-db:
image: postgres:11
environment:
POSTGRES_PASSWORD: "postgres"
POSTGRES_USER: "postgres"
POSTGRES_DB: "postgres"
ports:
- 5432:5432
#network_mode: host
然后我 运行 docker-compose up
它启动了容器
pg-db_1_78e7ec4a95e6 | 2020-02-21 13:53:53.928 UTC [1] LOG: database system is ready to accept connections
我可以用 docker exec
连接到它docker exec -it docker_pg-db-compose_1_78e7ec4a95e6 psql -h pg-db -U postgres postgres
但我无法通过 'naked' psql:
连接到它psql postgresql://postgres:postgres@localhost:5432/postgres
psql: could not connect to server: Connection refused
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
psql postgresql://postgres:postgres@pg-dg:5432/postgres
psql: could not translate host name "pg-db" to address: Name or service not known
我试过 network_mode
但没用。
启动docker-compose后,需要获取docker容器ip,方法如下:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
然后你可以postgresql://postgres:postgres@<container idp>:5432/postgres
你应该可以连接到它
我正在使用 Postgres DockerHub page 中提供的 docker-compose
文件的修改版本。
version: '3.1'
services:
db:
image: postgres:11
restart: always
ports:
- 5432:5432
environment:
POSTGRES_PASSWORD: postgres
当我 运行 docker-compose up
我收到一个非常相似的 "ready" 消息:
db_1 | 2020-02-21 14:34:17.826 UTC [1] LOG: database system is ready to accept connections
此时,我可以使用 psql 连接到 Postgres。
$ psql -h localhost -U postgres
Password for user postgres:
psql (12.2, server 11.7 (Debian 11.7-1.pgdg90+1))
Type "help" for help.
postgres=#
我也可以使用您提供的连接字符串和 postico 进行连接:
差异很细微,我不确定 restart 政策在这里是否有任何不同,但请尝试一下。