与docker的新手,我试图通过pgAdmin容器的本地主机连接到postgres容器。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0b00555238ba dpage/pgadmin4 "/entrypoint.sh" 43 minutes ago Up 43 minutes 0.0.0.0:80->80/tcp, 443/tcp pedantic_turing
e79fb6440a95 postgres "docker-entrypoint.s…" About an hour ago Up About an hour 0.0.0.0:5432->5432/tcp pg-docker
我成功连接了psql命令。
psql -h localhost -U postgres -d postgres
但是当我在pgAdmin上使用与psql相同的参数创建服务器时,出现以下错误。
无法连接到服务器:
无法连接到服务器:连接被拒绝服务器正在运行 在主机“ localhost”(127.0.0.1)上并接受TCP / IP连接 端口5432?无法连接到服务器:地址不可用 服务器在主机“ localhost”(:: 1)上运行并接受TCP / IP 端口5432上是否有连接?
我成功连接了docker inspect
容器上的IP地址。
顺便说一句,我检查了postgresql.conf并断言listen_addresses = '*'
以及pg_hba.conf包含host all all all md5
。
但是我不明白,为什么我不能使用本地主机地址?为什么码头工人甚至给我一个非本地地址?
答案 0 :(得分:8)
当您能够通过终端上的psql
命令而不是pgAdmin4进行连接时,我也遇到了这种情况。
以下解决方案对我有用。
第一-
docker ps
从那里您将获得postgres容器的容器名称/ ID,然后执行-
docker inspect name_of_container_here
它会给你这样的东西-
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "f35dbe66b36cd38673aad6e1278ad33031ef9d5abd34582d4b91955e288f855e",
"EndpointID": "2e63ea59e9d0de7526bb02ba29bc0b16bcad51b8963127ad380416d15da994db",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
答案 1 :(得分:2)
我遇到了同样的问题,并且以非规范的方式解决了该问题,但对我的本地工作流程非常满意。
我总是以docker-compose.yaml
文件开始我的postgresql容器。所以我只是将pgAdmin添加到了相同的撰写文件中:
version: "3.7"
services:
my_awesome_db:
image: postgres:latest
ports:
- "5432:5432"
container_name: postgresql-local
volumes:
- "/var/run/postgres.sock:/var/run/postgres/postgres.sock"
- "/home/myuser/docker-apps/volumes/postgres-data:/var/lib/postgresql/data"
pg_admin:
image: dpage/pgadmin4:latest
container_name: pgadmin4
ports:
- "15432:80"
environment:
- GUNICORN_THREADS=1
- PGADMIN_DEFAULT_EMAIL=my_awesome_email@email.com
- PGADMIN_DEFAULT_PASSWORD=does_not_matter
depends_on:
- my_awesome_db
因此,我在本地主机上访问pgAdmin:15432(只是因为它很容易记住),并且我已经用以下命令配置了pgAdmin:
Host: my_awesome_db
Port: 5432
Username: postgres
答案 2 :(得分:1)
对我来说,是这样的:
添加服务器->连接->主机名/地址
将字段设置为172.17.0.1
有关Docker网络文档的更多信息,请访问https://docs.docker.com/network/network-tutorial-standalone
答案 3 :(得分:0)
我不知道你是否还有问题。我想我已经找到了解决方法。
因此,我们注意到localhost不起作用,但是如果您在docker环境之外使用psql可以正常工作。但是这两个应用程序都在Docker中运行容器化,并且具有自己的网络配置。
如何发现?键入命令:docker network ls
某些网络将在控制台中列出,也许您会发现[name]_default
应该是您的网络。
执行docker network [name]_default inspect
会显示很多信息,对我们来说最重要的是IPv4Address,如下所示:
"7c3cd7532ab8aacc70830afb74adad7296d9c8ddd725c498af2d7ee2d2c2aadd": {
"Name": "intime_postegres_1",
"EndpointID": "56a9cb574469f22259497b72719f9f4a3e555b09f95058fcf389ef5287381f28",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
}
在pgAdmin上,我连接到172.18.0.2:5432
处的postgres实例。就像魅力一样。
答案 4 :(得分:0)
因为我要连接到软管上的服务器,所以就像添加一样简单
--net host
执行docker run命令,以便容器可以访问主机的端口。