Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 连接本地postgres数据库时docker pgAdmin4连接被拒绝_Postgresql_Docker_Ubuntu_Docker Compose_Pgadmin 4 - Fatal编程技术网

Postgresql 连接本地postgres数据库时docker pgAdmin4连接被拒绝

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:

我正在尝试使用pgAdmin4 docker容器连接本地postgres数据库。当我打开
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容器本身,而不是主机。

您可以使用image
qoomon/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