首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从另一个码头容器中的PostgreSQL访问码头容器上的pgAdmin4

从另一个码头容器中的PostgreSQL访问码头容器上的pgAdmin4
EN

Stack Overflow用户
提问于 2019-11-16 14:03:49
回答 2查看 1.5K关注 0票数 0

我有一个PostgreSQL实例运行在一个码头上,其中包含以下命令:

代码语言:javascript
复制
mkdir -p $HOME/vols/postgres

docker pull postgres:12.0

docker run --rm   --name pg-docker -e POSTGRES_PASSWORD=docker \
    -v $HOME/vols/postgres:/var/lib/postgresql/data \
    -d -p 5432:5432  postgres

它已经启动并运行,我可以从安装在本地机器上的DBeaver访问它。此外,我还通过以下命令安装了pgAdmin4:

代码语言:javascript
复制
mkdir -p $HOME/vols/pgadmin4

docker pull dpage/pgadmin4

docker run --rm --name pgadmin4 -p 5050:80 \    
    -v $HOME/vols/pgadmin4:/var/lib/pgadmin \
    -e 'PGADMIN_DEFAULT_EMAIL=amiry@manexapp.com' \
    -e 'PGADMIN_DEFAULT_PASSWORD=12345678' \
    -d dpage/pgadmin4

pgAdmin也运行良好,我可以很容易地访问它并通过http://localhost:5050登录到它。

但是,当我想通过pgAdmin4 4容器实例连接到postgre容器实例时,我会得到以下错误:

无法连接到服务器:

无法连接到服务器:服务器是否在主机"localhost“(127.0.0.1)上运行,并在端口5432上接受TCP/IP连接?无法连接到服务器:地址不可用,服务器是否运行在主机"localhost“(::1)上并接受端口5432上的TCP/IP连接?

有人知道这里出了什么问题吗?提前谢谢。

注意:我的主机是Fedora 31。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-16 14:32:13

在容器内,环回地址(localhost或127.0.0.1)指“此容器”。当您试图在127.0.0.1容器中连接到pgAdmin4时,它会失败,因为您的Postgres服务没有在pgAdmin4容器中运行。

使此工作的最简单方法是将两个容器放在用户定义的网络上,在这种情况下,它们可以通过名称相互引用。

首先创建一个网络:

代码语言:javascript
复制
docker network create dbnet

然后在该网络上启动postgres容器:

代码语言:javascript
复制
docker run --rm --name pg-docker -e POSTGRES_PASSWORD=docker \
    --net dbnet \
    -v $HOME/vols/postgres:/var/lib/postgresql/data \
    -d -p 5432:5432  postgres

最后,在该网络上启动pgAdmin4容器:

代码语言:javascript
复制
docker run --rm --name pgadmin4 -p 5050:80 \    
    --net dbnet \
    -v $HOME/vols/pgadmin4:/var/lib/pgadmin \
    -e 'PGADMIN_DEFAULT_EMAIL=amiry@manexapp.com' \
    -e 'PGADMIN_DEFAULT_PASSWORD=12345678' \
    -d dpage/pgadmin4

现在,当您访问pgadmin时,您可以连接到主机pg-docker,而不是localhost

票数 2
EN

Stack Overflow用户

发布于 2019-11-16 14:54:16

更新: OK。larsks通过创建自定义网络方法添加了一个完整的detailed answer,这更有意义。我试试看让你知道。

好的。我发现存在网络问题,pgAdmin4-docker无法看到pg12-docker。所以,我做了这些步骤来解决这个问题:

A.通过以下方式停止pgadmin4集装箱:

代码语言:javascript
复制
docker stop pgadmin4

这也将删除容器,因为我使用了--rm标志运行它。

B.通过运行以下命令查找与pg12-docker相关联的网络名称和IP:

代码语言:javascript
复制
docker inspect pg12-docker

这将响应一个大型JSON文件。查找Networks节点:

代码语言:javascript
复制
"Networks": {
    "bridge": {
        "Gateway": "172.17.0.1",
        "IPAddress": "172.17.0.2",
        // other lines omitted  
    }
}

您将看到网络名是JSON (本例中的bridge)和IPAddress的第一个子级。在某个地方注意主题。

C.使用--network [NetworkName]参数重新运行pgAdmin4-docker;将[NetworkName]替换为前面步骤中的名称(本例中为bridge)。

代码语言:javascript
复制
docker run --rm --name pgadmin4 -p 5050:80 --network bridge \    
    -v $HOME/vols/pgadmin4:/var/lib/pgadmin \
    -e 'PGADMIN_DEFAULT_EMAIL=amiry@manexapp.com' \
    -e 'PGADMIN_DEFAULT_PASSWORD=12345678' \
    -d dpage/pgadmin4

访问(或刷新) http://localhost:5050并登录到它。在Add server部分,使用步骤B中的IPAddress

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58891504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档