新手与docker,我试图连接正确的localhost我的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)上运行并接受端口5432上的TCP/IP连接?无法连接到服务器:服务器是否在主机“localhost”(::1)上运行,并在端口5432上接受TCP/IP连接?
我成功地连接到正确的IP地址由docker inspect
在容器上。
顺便说一下,我检查了postgresql.conf,并Assertlisten_addresses = '*'
和pg_hba.conf包含host all all all md5
。
但我不明白,为什么我不能使用本地主机地址?为什么docker甚至给予我一个不是本地的地址?
8条答案
按热度按时间wnvonmuf1#
在这种情况下:
尽管您没有说明是否这样做,但理想情况下,这两个容器都可以是用于自动DNS解析的自定义bridge network的一部分。
如果没有明确添加,它们将成为默认网桥网络的一部分。
要找出在Docker运行时中创建的网络,请键入:$
docker network ls
一些网络会在控制台中列出,也许你会发现一个
[name]_default
它应该是你的网络。执行
docker network inspect [name]_default
,它会显示一堆信息,对我们来说最重要的是IPv4地址,类似这样:"7c3cd7532ab8aacc70830afb74adad7296d9c8ddd725c498af2d7ee2d2c2aadd": { "Name": "intime_postegres_1", "EndpointID": "56a9cb574469f22259497b72719f9f4a3e555b09f95058fcf389ef5287381f28", "MacAddress": "02:42:ac:12:00:02", "IPv4Address": "172.18.0.2/16", "IPv6Address": "" }
不要在pgAdmin new server对话框中使用localhost作为服务器名称/ip,而是连接到postgres示例的“IPv4 Address”。
在我的情况下连接在
172.18.0.2:5432
,工作就像一个魅力。vqlkdk9b2#
我也遇到过这样的情况,你可以在终端上使用
psql
命令连接,但不能使用pgAdmin 4。以下解决方案对我有效。首先-
从那里你会得到postgres容器的容器名/ID,然后做-
它会给你给予这样的东西-
记下IP地址,并在pgAdmin 4-x1c 0d1x中创建新服务器时提供该地址
xqk2d5yq3#
我遇到了同样的问题,我用一种非规范的方式解决了它,但对我的本地工作流程非常满意。
我总是用一个
docker-compose.yaml
文件启动我的postgresql容器。所以我只是将pgAdmin添加到同一个compose文件中:所以我在我的localhost:15432上访问pgAdmin(只是因为它很容易记住),我已经配置了pgAdmin:
k2fxgqgv4#
对我来说是这样工作的:
添加服务器->连接->主机名/地址
将字段设置为172.17.0.1
Docker Network doc的更多信息:https://docs.docker.com/network/network-tutorial-standalone
9vw9lbht5#
首先,您需要获取集装箱信息
然后提取IP地址
当你创建你的服务器时,
zbwhf8kr6#
您只需要在连接字符串中指定服务器参数、容器名称,而不是localhost或127.0.0.1
qncylg1j7#
我的pgAdmin运行在docker主机(osx)上。在docker-compose.yml中,我必须设置
explicit.这一行以前没有。但这一条线成功了。
下面是我的例子:
之后,我可以使用pgadmin连接到“localhost”。如果你重新启动你的容器,它是保存的!您不需要使用docker inspect搜索IP地址
如果你不这样做,你的docker将不会有一个HostIp“0.0.0.0“,而只有一个tcp 5432连接。
背景资料:
1.检查您正在运行的Docker容器
docker ps
1.获取pgsql的名称并执行
docker inspect name_of_container_here
1.找到行“端口:
在更改docker-compose.yml之前,
docker-inspect ...
将显示“Ports”5432/tcp为null:修改docker-compose.yml后,
docker inspect ...
将显示以下内容,您现在可以看到“HostIp”:“0.0.0.0“,阿索.oyxsuwqo8#
因为我是连接到一个服务器上的软管,这是一样简单,添加
--net host
到docker run命令,这样容器就可以访问主机的端口。