我正在尝试使用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
答案 0 :(得分:2)
您可以从dns名称为host.docker.internal
的docker容器中访问主机。用此名称替换服务器连接中的localhost
。 pgAdmin中的名称localhost
是指Docker容器本身,而不是主机。
答案 1 :(得分:1)
您可以使用图像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正在侦听此地址。
Ubuntu / linux版本的Docker当前不支持host.docker.internal DNS名称,该名称会将容器指向主机。这是在Mac或Windows的Docker中链接到主机的最简单方法。我希望我们也能尽快将其用于Linux。
有关docker-host的更多信息,请参见Github存储库:https://github.com/qoomon/docker-host
答案 2 :(得分:0)
首先调用此命令:sudo netstat -nplt
,以确保有人在监听端口5432。
比致电sudo ip addr
来了解您的主机mashine的IP。
比尝试使用真实IP代替localhost
进行连接。
我在您的ip addr
输出中看到了
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
答案 3 :(得分:0)
答案 4 :(得分:0)
您可以尝试将其添加到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 bright网络掩码。并再次检查。顺便说一句。要连接到您的localhost(在主机上),您需要连接到docker bright 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
答案 5 :(得分:0)
在那之前我遇到了一些问题,现在我找到了解决方案。
只需输入此命令
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
作为主机名
希望能帮到你。