在主机上的客户端 docker 和 postgres 服务器之间连接 [重复]

Posted

技术标签:

【中文标题】在主机上的客户端 docker 和 postgres 服务器之间连接 [重复]【英文标题】:Connect between client docker and postgres server on host [duplicate] 【发布时间】:2019-10-20 16:13:44 【问题描述】:

我的主机上有一个 postgres 服务器,我想创建一个连接到这个 postgres 服务器的 docker 容器。

所以我想我需要将连接 IP:5432 上的 postgres 服务器公开给 docker。在 docker 上公开 5432 并在 docker 内指定正确的连接信息,例如:

SQLALCHEMY_DATABASE_URI = "postgresql+psycopg2://username:password@IP/db_name"

主机 docker IP 是:

docker0   Link encap:Ethernet  HWaddr 02:42:b3:d9:eb:e2  
          inet addr:172.17.0.1  Bcast:172.17.255.255  Mask:255.255.0.0
          inet6 addr: fe80::42:b3ff:fed9:ebe2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:213512 errors:0 dropped:0 overruns:0 frame:0
          TX packets:351284 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:9157933 (9.1 MB)  TX bytes:826914241 (826.9 MB)

docker_gwbridge Link encap:Ethernet  HWaddr 02:42:5c:b9:3b:0a  
          inet addr:172.18.0.1  Bcast:172.18.255.255  Mask:255.255.0.0
          inet6 addr: fe80::42:5cff:feb9:3b0a/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:436 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:64397 (64.3 KB)

我缺少什么以及如何将 postgres 服务器暴露给主机端的相关端口。

【问题讨论】:

尝试将 DATBASE_URL 更改为本地主机,如下所示,SQLALCHEMY_DATABASE_URI = "postgresql+psycopg2://username:password@localhost/db_name" 然后使用 --network="host" 启动容器。这会将主机网络绑定到访客 【参考方案1】:

也许您可以考虑为您的容器使用网络模式:host。

这意味着容器并没有真正与您的主机网络隔离,可以使用 localhost:5432 连接到您的数据库。

【讨论】:

以上是关于在主机上的客户端 docker 和 postgres 服务器之间连接 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

允许 docker 容器连接到本地/主机 postgres 数据库

无法使用 Postgres、Docker Compose 和 Psycopg2 将主机名“db”转换为地址

Postgres 9.1 的 Docker 容器未将端口 5432 暴露给主机

WSL2 和 Docker 桌面上的 Postgres 卷挂载:PGDATA 文件夹上的权限被拒绝

Docker上的Postgres - 超出堆栈深度限制

Docker - 如何在postgres容器中运行psql命令?