我想拥有一个运行有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
目录中。有什么想法吗?
感谢您的回复,并祝您愉快。
答案 0 :(得分:2)
我认为发生的事情是,即使将标志<v-checkbox
v-for="option in pref.options"
:key="option"
:v-model="pref.selectedOption"
:label="option"
color="red"
value="option"
hide-details
设置为depends_on
,也仅意味着database
容器将在web
容器启动之后启动。但是,这通常是第一次,数据库通常需要花费相当长的时间才能建立,并且在database
服务器启动时,数据库仍未准备好接受连接。
两种解决此问题的方法:
web
(docker-compose up -d
模式),然后等待数据库完成初始化。然后再次运行detach
,您的docker-compose up -d
容器现在可以连接到数据库了。web
更新web
容器,因此restart: always
将继续尝试重新启动docker-compose
容器,直到容器成功运行为止(直到数据库准备就绪为止)。接受连接)web