[英]docker pgAdmin4 connection refused while connecting local postgres database
我正在尝试使用 pgAdmin4 docker 容器连接我的本地 postgres 数据库。 当我打开http://localhost:5050/
并在创建新的服务器连接后登录时,我得到Unable to connect to server: could not connect to server: Connection refused
错误消息。
这是我的docker-compose.yml
文件
version: '3.5'
services:
pgadmin:
container_name: pgadmin4
image: dpage/pgadmin4
environment:
PGADMIN_DEFAULT_EMAIL: db@db.com
PGADMIN_DEFAULT_PASSWORD: odoo
volumes:
- pgadmin:/root/.pgadmin
ports:
- "5050:80"
restart: unless-stopped
volumes:
pgadmin:
我正在寻找将我的本地 postgres 数据库与 pgadmin4 docker 容器连接起来的解决方案。 我正在使用Ubuntu 20.04操作系统系统。
----根据@Veikko的回答更新了-----------
这是我的 docker-compose 文件代码https://pastebin.com/VmhZwtaL
这是postgresql.conf文件https://pastebin.com/R7ifFrGR
和pg_hba.conf文件https://pastebin.com/yC2zCfBG
您可以从 dns 名称host.docker.internal
的 docker 容器访问您的主机。 用此名称替换服务器连接中的localhost
。 pgAdmin 中的名称localhost
指的是 docker 容器本身,而不是您的主机。
您可以使用镜像qoomon/docker-host
访问主机上的服务。 像这样将 docker-host 服务添加到您的 docker-compose 中:
version: '3.5'
services:
docker-host:
image: qoomon/docker-host
cap_add: [ 'NET_ADMIN', 'NET_RAW' ]
restart: on-failure
pgadmin:
container_name: pgadmin4
image: dpage/pgadmin4
environment:
...
在此之后,您应该能够使用主机名 docker-host 访问您的主机 Postgres 服务。 在您的连接字符串中将localhost
替换为docker-host
并且连接应该可以工作。
如果在此之后出现连接问题,请确保您没有任何防火墙阻止流量,您有正确的 Docker 网络设置(请参阅文档)并且您的 postgresql 正在侦听此地址。
Docker 的 Ubuntu/linux 版本当前不支持主机。docker.internal DNS 名称将容器指向主机。 这是在 Docker for Mac 或 Windows 中链接到主机的最简单方法。 我希望我们也能尽快得到 Linux。
关于 docker-host 的更多信息可以在 Github repo 中找到: https://github.com/qoomon/docker-host
首先调用它: sudo netstat -nplt
以确保有人在端口 5432 上监听。
比调用sudo ip addr
来了解主机主机的 IP。
比尝试使用真正的 IP 而不是localhost
进行连接。
我在您的ip addr
output 中看到:
3: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 30:10:b3:e4:39:e2 brd ff:ff:ff:ff:ff:ff inet 192.168.43.190/24 brd 192.168.43.255 scope global dynamic noprefixroute wlp3s0
所以你真正的 IP 是 192.168.43.190
您可以尝试添加到您的pg_hba.conf
host all all 0.0.0.0/0 trust
或者
host all all 0.0.0.0/0 md5
去测试。
然后,如果这有效,您应该将0.0.0.0/0
网络掩码更改为 docker 明亮网络掩码。 并再次检查。 顺便提一句。 要连接到您的本地主机(在主机上),您需要连接到 docker 明亮的 ip 对我来说它是172.17.0.1/32
。
编辑:第二: postgresql.conf
取消注释并阅读其中的内容:
listen_addresses = '*' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
您需要绑定到可从 docker 连接的 IP,所以在我的情况下它应该是172.17.0.1
在此之前我遇到了一些问题,现在我找到了解决方案。
只需输入此命令
docker exec <container_name> cat /etc/hosts
然后它会显示这个
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.18.0.3 607b00c25f29
使用172.18.0.3
作为主机名
希望这可以帮到你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.