首页 > 解决方案 > PostgreSQL 和 pgAdmin 都在 Docker 容器中运行并连接

问题描述

我正在尝试在 Docker 容器中同时运行 PostgreSQL 和 pgAdmin。这个想法是 PostgreSQL 数据库应该可以被我在主机上运行的任何应用程序以及 pgAdmin 访问。

我正在使用这个命令来运行 PostgreSQL:

docker run -d -e POSTGRES_USER=username -e POSTGRES_PASSWORD=password --name postgres -p 5432:5432 postgres

并运行pgAdmin

docker run -d -p 1111:1111 --name pgadmin -e "PGADMIN_LISTEN_PORT=1111" -e "PGADMIN_DEFAULT_EMAIL=admin@test.com" -e "PGADMIN_DEFAULT_PASSWORD=test" dpage/pgadmin4

如果我去localhost:1111,我可以连接到 pgAdmin 并登录。但是,当我尝试连接到我的本地 PostgreSQL 实例时,它没有得到任何响应。

--net=host因此,我尝试使用以下方式运行 pgAdmin 以访问主机互联网-p 1111:1111

docker run -d --net=host --name pgadmin -e "PGADMIN_LISTEN_PORT=1111" -e "PGADMIN_DEFAULT_EMAIL=admin@test.com" -e "PGADMIN_DEFAULT_PASSWORD=test" dpage/pgadmin4

现在,当我尝试localhost:1111连接到 pgAdmin 时,我的浏览器没有响应。

Docker Compose 是一种可能的解决方案,因为我可以将两个容器链接在一起,这样它们就可以相互访问而不必担心端口,但我还需要 pgAdmin 才能访问其他机器上的 PostgreSQL 实例,以及我的本地实例.

我觉得--net=hostDocker 坏了。这里有一个完整的线程,有很多混乱。

我的设置:

Host: Windows 10
Docker: Docker Desktop Community v2.0.0.3 (31259)

更新

我现在尝试--link postgres在 pgAdmin 容器上使用它,它允许我连接到我的本地 PostgreSQL 实例,但不能连接到非本地实例,完整的命令是:

docker run -d -p 1111:1111 --link postgres --name pgadmin -e "PGADMIN_LISTEN_PORT=1111" -e "PGADMIN_DEFAULT_EMAIL=admin@test.com" -e "PGADMIN_DEFAULT_PASSWORD=test" dpage/pgadmin4

标签: postgresqldockerpgadmin

解决方案


命令没有错,只有 pgAdmin 中的连接,所以完整的命令列表是:


对于 PostgreSQL:

docker run -d -e POSTGRES_USER=username -e POSTGRES_PASSWORD=password --name postgres -p 5432:5432 postgres

和 pgAdmin:

docker run -d -p 1111:1111 --name pgadmin -e "PGADMIN_LISTEN_PORT=1111" -e "PGADMIN_DEFAULT_EMAIL=admin@test.com" -e "PGADMIN_DEFAULT_PASSWORD=test" dpage/pgadmin4

现在pgAdmin容器将无法连接localhost但需要 PostgreSQL 容器的 IP。跑:

docker inspect postgres

检查结果:

[
    {
        ...
        "NetworkSettings": {
            ...
            "Networks": {
                ...
                "IPAddress": "172.17.0.3",
                ...
            }
        }
    }
]

我们只对IPAddressfrominspect命令感兴趣。这是 pgAdmin 应该连接的 IP。

pgAdmin 还能够从您的机器访问外部 IP。


推荐阅读