我有一个使用以下命令在docker上运行的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/pgadmin4
pgAdmin也正常运行,我可以轻松访问它并通过http://localhost:5050登录。
但是当我想通过pgAdmin4-container实例连接到我的postgre-container实例时,出现此错误:
无法连接到服务器:
无法连接到服务器:连接被拒绝服务器正在运行 在主机“ localhost”(127.0.0.1)上并接受TCP / IP连接 端口5432?无法连接到服务器:地址不可用 服务器在主机“ localhost”(:: 1)上运行并接受TCP / IP 端口5432上是否有连接?
有人知道这是怎么回事吗?提前致谢。
注意:我的主机是Fedora31。
答案 0 :(得分:1)
在容器内,环回地址(localhost
或127.0.0.1)引用“此容器”。当您尝试连接到pgAdmin4容器内的127.0.0.1
时,它将失败,因为您的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 ui时,可以连接到主机pg-docker
而不是localhost
。
答案 1 :(得分:0)
更新:确定。 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
D。访问(或刷新)http://localhost:5050并登录。在Add server
部分中,使用在步骤B中获得的IPAddress
。