python - 无法将 python 应用程序容器连接到本地 postgres
问题描述
我正在尝试通过在容器中运行的 python 脚本连接到本地运行的 postgres。我之所以这样设置它,是因为将来一旦部署,我将使用启动 postgres 的托管数据库服务。
理想情况下,我可以在 docker-compose 中定义一个 postgres url .env
,docker-compose 使用 env 设置环境变量,应用程序读取 postgres url。
这是最好的方法还是我应该有一个 postgres 容器。
实现我刚才描述的流程的最佳方法。
尝试使用 localhost、公共 ip、本地 ip 在 .env 中传递 POSTGRES_URL。例如:postgresql://username:password@localhost:5432/dbname
version: "3.7"
services:
app:
build:
context: ./
dockerfile: Dockerfile
volumes:
- "./:/usr/src/app"
environment:
- ENV=${ENV}
- LOGS=${LOGS}
- AWS_REGION=${AWS_REGION}
- AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
- AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
- POSTGRES_URL=${POSTGRES_URL}
预期:连接到本地数据库成功。
实际:服务器是否在主机 <"ip"> 上运行并接受端口 5432 上的 TCP/IP 连接?
解决方案
我会在 docker-compose 中使用 postgres 容器,如下所示:
db:
image: postgres:11.4
ports:
# In order to connect to the database from the host
- "5432:5432"
environment:
- POSTGRES_PASSWORD=pw
- POSTGRES_USER=user
在此示例中,您将填写用户名和密码来启动您的容器。
一旦你的docker-compose.yml
文件中有这个,你的应用程序容器将能够通过服务名称访问数据库容器。在此示例中,它将是db
. 所以你的连接字符串是postgresql://user:pw@db:5432/dbname
推荐阅读
- reactjs - react-bootstrap 行填充所有可用空间
- sql - Postgres - 数组中复合类型的部分匹配
- ruby-on-rails - 如何在没有登录rails的情况下获得评级?
- javascript - 对多个 HTML 复选框执行条件
- java - Java 和 Go 中不同的 CRC32 值
- python - 在 TensorFlow 对象检测 API 中连续应用增强的正确方法是什么?
- sql - 为什么 st_distance('polygon from north pole', 'point in italy') 结果给我 '0'?
- php - PHPspreadsheet 和 JS:如何支持阿拉伯语?
- php - 联系表格消息发送动画
- javascript - 加载后立即使用动态加载的javascript?