【问题标题】:Docker container with Python Web App - Connect to Postgres on Host machine (OSX)带有 Python Web 应用程序的 Docker 容器 - 连接到主机 (OSX) 上的 Postgres
【发布时间】:2017-03-03 04:34:55
【问题描述】:

我可以在我的网络应用程序中连接到本地 Postgres 数据库,但如果我在 Docker 容器内运行网络应用程序,不能

  • 在 Docker 容器内运行的 Web 应用
  • 在主机中运行的 Postgres

我不确定它是否与 Postgres 连接设置或 Docker 网络设置有关。

按照我的设置和命令:

主持人

  • OSX 10.11.6
  • PostgreSQL 9.6

Docker 容器

  • Docker 1.13.1
  • Docker 机器 0.9.0
  • Docker 容器操作系统:python:3.6.0-alpine
  • Python 3.6 + psycopg2==2.7

postgresql.conf

listen_addresses = '*'

pg_hba.conf

host    all             all             127.0.0.1/32            trust
host    all             all             0.0.0.0/0               trust
host    all             all             172.17.0.0/24           trust
host    all             all             192.168.99.0/24       trust

Docker 网络处于 HOST 模式

docker run -i --net=host -h 127.0.0.1 -e POSTGRES_URI=postgresql://127.0.0.1:5432/db my/image

错误:

无法连接到服务器:连接被拒绝
服务器是否正在运行 在主机“127.0.0.1”上并接受端口 5432 上的 TCP/IP 连接?

在 BRIDGE 模式下使用 Docker 网络

docker run -i --add-host=dockerhost:`docker-machine ip ${DOCKER_MACHINE}` -e POSTGRES_URI=postgresql://dockerhost:5432/db -p 8000:8000 -p 5432:5432 my/image

错误:

服务器意外关闭连接
这大概意味着 服务器在处理请求之前或期间异常终止。

有什么想法吗?

【问题讨论】:

  • 没有在容器中运行 postgres 的任何特殊原因?

标签: python postgresql docker


【解决方案1】:

docs 中有关于这样做的说明

我想从容器连接到主机上的服务

Mac 有一个不断变化的 IP 地址(如果您没有网络访问权限,则没有)。我们目前的建议是在 Mac 上的lo0 接口上附加一个未使用的 IP;例如:sudo ifconfig lo0 alias 10.200.10.1/24,并确保您的服务正在侦听此地址或0.0.0.0(即不是127.0.0.1)。然后容器可以连接到这个地址。

【讨论】:

  • 我可以通过这个提示连接到外部服务,谢谢!我错过了。
  • @PauloCheque,很高兴我能帮上忙。不要忘记将解决您问题的答案标记为正确。这有助于其他遇到您的问题的人。
猜你喜欢
  • 1970-01-01
  • 2018-11-28
  • 2021-12-23
  • 1970-01-01
  • 2017-02-11
  • 1970-01-01
  • 2018-01-31
  • 1970-01-01
  • 2019-07-30
相关资源
最近更新 更多