我正试图通过在容器中运行的python脚本连接到本地运行的postgres。我这样设置它是因为将来一旦部署,我将使用一个托管数据库服务来启动postgres。你知道吗
理想情况下,我能够在.env
中定义postgres url,docker compose使用env设置环境变量,应用程序读取postgres url。你知道吗
这是最好的方法还是我应该有一个postgres容器。
实现我刚才描述的流程的最佳方法。
尝试使用localhost、public ip、local ip在.env中传递POSTGRES\u URL。e、 g:p公司ostgresql://username:password@localhost:5432/数据库名
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连接?你知道吗
容器中的
localhost
表示容器本身,而不是docker主机。如果您使用localhost
访问postgres,它将尝试在容器中查找服务,但容器实际上没有db服务。您应该为本地postgres设置docker主机ip。你知道吗例如,如果docker主机ip是
10.192.225.111
,那么.env
中的POSTGRES_URL
应该是:我会在docker compose中使用postgres容器,如下所示:
在本例中,您需要填写用户名和密码来启动容器。你知道吗
一旦您的
docker-compose.yml
文件中有了这个,您的应用程序容器将能够通过服务名称访问数据库容器。在这个例子中,它将是db
。所以你的连接字符串应该是postgresql://user:pw@db:5432/dbname
好吧,我用mac作为开发机器,这一点我应该提到过,对于那些正在努力解决同样问题的人来说。mac的docker主机IP总是在变化。你知道吗
将my.env postgres url更改为:
postgresql://username:password@docker.for.mac.localhost:5432/dbname
似乎能成功。你知道吗
相关问题 更多 >
编程相关推荐