我想要一个可与Postgresql数据库(psycopg2)一起运行的python flask应用程序。所以我做了这个docker-compose文件:
version: "3"
services:
web:
depends_on:
- database
container_name: web
build:
context: "."
dockerfile: "docker/Dockerfile.web"
ports:
- 5000:5000
volumes:
- database:/var/run/postgresql
database:
container_name: database
environment:
POSTGRES_PASSWORD: "password"
POSTGRES_USER: "user"
POSTGRES_DB: "products"
image: postgres
expose:
- 5432
volumes:
- database:/var/run/postgresql
volumes:
database:
在我的app.py中,我尝试像这样连接到postgres:
conn = psycopg2.connect(database="products", user="user", password="password", host="database", port="5432")
当我跑docker-compose up
我得到以下错误:
“数据库是运行在主机上的服务器‘’(172.21.0.2),并接受在端口5432的TCP / IP连接? ”
我不知道我在哪里弄错了。
/var/run/postgresql
“ Web”容器上的目录中。有任何想法吗 ?
感谢您的答复,祝您有愉快的一天。
我认为发生的事情是,即使将标志depends_on
设置为database
,也仅意味着web
容器将在database
容器启动后启动。但是,第一次,数据库通常将花费相当多的时间来建立,并且当web
服务器启动时,数据库仍未准备好接受连接。
解决此问题的2种方法:
docker-compose up -d
(detach
mode)并等待数据库完成初始化。然后docker-compose up -d
再次运行,您的web
容器现在将能够连接到数据库。web
容器,restart: always
因此docker-compose
它将继续尝试重新启动web
容器,直到容器成功运行为止(直到数据库准备好接受连接为止)version: "3"
services:
web:
depends_on:
- database
...
restart: always
...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句