postgresql - 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=host
Docker 坏了。这里有一个完整的线程,有很多混乱。
我的设置:
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
解决方案
命令没有错,只有 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",
...
}
}
}
]
我们只对IPAddress
frominspect
命令感兴趣。这是 pgAdmin 应该连接的 IP。
pgAdmin 还能够从您的机器访问外部 IP。
推荐阅读
- unicode - 仅将非 utf-8 文件转换为 utf-8
- python - 为 Python 3.8 Azure 函数加载 azure-cosmos 库时遇到问题
- javascript - rxjs observable.pipe 未在 HttpTestingController 中触发
- javascript - 如何在 d3 中使用 CSV 高度、重量、半径和颜色创建圆圈
- java - Java大内存映射
- android - Android Studio项目不同模块中的访问常量
- pytorch - 使用 fastai 的 learn.lr_find() 选择 learning_rate
- html - 如何让 LI 元素包裹在 UL 中?
- python - 过滤、替换值并连接到一个数据帧
- java - Java内存泄漏,HEAP大小没有减少