Postgresql 连接本地postgres数据库时docker pgAdmin4连接被拒绝
我正在尝试使用pgAdmin4 docker容器连接本地postgres数据库。当我打开Postgresql 连接本地postgres数据库时docker pgAdmin4连接被拒绝,postgresql,docker,ubuntu,docker-compose,pgadmin-4,Postgresql,Docker,Ubuntu,Docker Compose,Pgadmin 4,我正在尝试使用pgAdmin4 docker容器连接本地postgres数据库。当我打开http://localhost:5050/并在创建新服务器连接后登录。我获得了无法连接到服务器:无法连接到服务器:连接被拒绝错误消息 这是我的docker compose.yml文件 version: '3.5' services: pgadmin: container_name: pgadmin4 image: dpage/pgadmin4 environment:
http://localhost:5050/
并在创建新服务器连接后登录。我获得了无法连接到服务器:无法连接到服务器:连接被拒绝
错误消息
这是我的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文件代码
这里是postgresql.conf文件
和pg_hba.conf文件您可以使用dns名称
host.docker.internal
从docker容器访问主机。用此名称替换服务器连接中的localhost
。pgAdmin中的名称localhost
指的是docker容器本身,而不是主机。您可以使用imageqoomon/docker host
访问主机上的服务。将docker主机服务添加到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的host Postgres服务。将连接字符串中的localhost
替换为docker-host
,连接应该可以正常工作
如果在此之后出现连接问题,请确保您没有防火墙阻止通信,您有正确的Docker网络设置(请参阅文档),并且您的postgresql正在侦听此地址
Ubuntu/linux版本的Docker当前不支持将容器指向主机的host.Docker.internal DNS名称。这是在Docker for Mac或Windows中链接到主机的最简单方法。我希望我们很快也能把这个应用到Linux上
有关docker主机的更多信息可以在Github repo中找到:首先调用此:
sudo netstat-nplt
以确保有人在端口5432上侦听。然后致电
sudo ip addr
了解主机mashine的ip。然后尝试使用真实IP连接,而不是使用
localhost
我在您的
ip地址输出中看到:
3:wlp3s0:mtu 1500 qdisc noqueue state UP组默认qlen 1000链路/以太30:10:b3:e4:39:e2 brd ff:ff:ff:ff:ff:ff:ff:ff inet 192.168.43.190/24 brd 192.168.43.255作用域全局动态noprefixroute wlp3s0
因此,您的实际IP是192.168.43.190创建一个主机名/地址为172.17.0.1的服务器
并确保PostgreSQL正在侦听(*)
您可以尝试添加到pg_hba.conf
host all all 0.0.0.0/0 trust
或
测试
如果这样做有效,您应该将0.0.0.0/0
网络掩码更改为docker bright网络掩码。再检查一遍。顺便说一句,要连接到您的本地主机(在主机上),您需要连接到docker bright ip。我的ip地址是172.17.0.1/32
编辑:
第二个:postgresql.conf
host all all 0.0.0.0/0 trust
取消注释并阅读所写内容:
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
使用172.18.0.3
作为主机名
希望这能对您有所帮助。您的数据库在哪里运行,地址是什么?pgadmin不包含在本地5432端口中运行的数据库进程…数据库。我想访问pgadmin4中的数据库。在哪里运行数据库?在承载容器的计算机上或在另一个容器中?DB在本地系统上运行是的,但我仍然无法连接感谢您使用操作系统信息更新问题。Ubuntu/linux版本的docker尚不支持host.docker.internal。这适用于Docker for Mac/Windows版本18.03。稍后我将发布一个与linux兼容的答案作为单独的答案。您好@Veikko,谢谢您的回答。我已经尝试按照您的回答,我得到了这个错误,这是我的docker compose文件代码,在这里我共享了我的postgresql.conf contains和pg_hba.conf文件,其中包含pgadmin主机名,屏幕截图中的主机名是仅适用于win/mac('host.docker.internal')的dns名。请在pgadmin字段“主机名/地址”中使用名称“docker主机”。它指的是docker-compose.yaml中指定的qoomon:docker主机容器的服务名称。您能说明我应该在主机名/地址字段中输入什么吗?在主机名/地址中使用“docker主机”。仍然无法工作无法连接到服务器:无法连接到服务器:连接被拒绝服务器是否在主机“docker主机”上运行(172.29.0.2)并在端口5432上接受TCP/IP连接?我在哪里找到了真正的IP。我已经在这里给出了两个命令,这两个命令的输出都在等待您的答复,谢谢。它不是这样工作的。我必须使用docker pgAdmin4连接本地postgres数据库。它对我有效,我在Ubuntu 20.04-PostgreSQL-12和pgAdmin4.23中使用它(Docker)。谢谢你的回复。你能在此更新你遵循的步骤吗?谢谢我在&&&&
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