我想要一个可与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
目录中。 有任何想法吗 ?
感谢您的答复,祝您有愉快的一天。
最佳答案
我认为发生的事情是,即使将depends_on
标志设置为database
,这也仅意味着web
容器将在database
容器启动后启动。但是,第一次,数据库通常需要花费相当长的时间才能建立,并且当web
服务器启动时,数据库仍未准备好接受连接。
解决此问题的2种方法:
docker-compose up -d
(detach
模式)并等待数据库完成初始化。然后再次运行docker-compose up -d
,您的web
容器现在将能够连接到数据库。 web
更新restart: always
容器,因此docker-compose
将继续尝试重新启动web
容器,直到它成功运行(直到数据库准备好接受连接为止)version: "3"
services:
web:
depends_on:
- database
...
restart: always
...
关于python - Docker公开容器之间的端口,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60737960/