我有一个PostgreSQL实例运行在一个码头上,其中包含以下命令:
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:
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/pgadmin4pgAdmin也运行良好,我可以很容易地访问它并通过http://localhost:5050登录到它。
但是,当我想通过pgAdmin4 4容器实例连接到postgre容器实例时,我会得到以下错误:
无法连接到服务器:
无法连接到服务器:服务器是否在主机"localhost“(127.0.0.1)上运行,并在端口5432上接受TCP/IP连接?无法连接到服务器:地址不可用,服务器是否运行在主机"localhost“(::1)上并接受端口5432上的TCP/IP连接?
有人知道这里出了什么问题吗?提前谢谢。
注意:我的主机是Fedora 31。
发布于 2019-11-16 14:32:13
在容器内,环回地址(localhost或127.0.0.1)指“此容器”。当您试图在127.0.0.1容器中连接到pgAdmin4时,它会失败,因为您的Postgres服务没有在pgAdmin4容器中运行。
使此工作的最简单方法是将两个容器放在用户定义的网络上,在这种情况下,它们可以通过名称相互引用。
首先创建一个网络:
docker network create dbnet然后在该网络上启动postgres容器:
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容器:
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。
发布于 2019-11-16 14:54:16
更新: OK。larsks通过创建自定义网络方法添加了一个完整的detailed answer,这更有意义。我试试看让你知道。
好的。我发现存在网络问题,pgAdmin4-docker无法看到pg12-docker。所以,我做了这些步骤来解决这个问题:
A.通过以下方式停止pgadmin4集装箱:
docker stop pgadmin4这也将删除容器,因为我使用了--rm标志运行它。
B.通过运行以下命令查找与pg12-docker相关联的网络名称和IP:
docker inspect pg12-docker这将响应一个大型JSON文件。查找Networks节点:
"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)。
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。
https://stackoverflow.com/questions/58891504
复制相似问题