【发布时间】:2019-06-14 08:38:54
【问题描述】:
在我的项目中,我有一个连接到 postgresql 数据库的烧瓶应用程序,我需要将它打包到一个 docker 中。我这样创建了 Dockerfile:
FROM python:3.6
ENV PYTHONUNBUFFERED 1
ADD . /todo
WORKDIR /todo
RUN pip install -r requirements.txt
还有像这样的 docker-compose.yml 文件:
web:
build: .
command: python run.py
ports:
- "5000:5000"
volumes:
- .:/todo
links:
- db
db:
image: postgres
environment:
POSTGRES_USER: todo
POSTGRES_PASSWORD: todo321
POSTGRES_DB: todo
ports:
- 5432:5432
restart: always
我有配置文件,指定烧瓶应用程序的数据库连接。
SQLALCHEMY_DATABASE_URI = "postgresql://todo:todo321@db/todo"
然后运行docker-compose build 没有任何错误。但是当尝试使用迁移脚本创建表来运行容器时:
docker-compose run web python migrate.py db migrate
它给了我错误:
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Cannot assign requested address
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
依赖:
flask == 1.0.3
flask-restful == 0.3.7
flask-sqlalchemy == 2.4.0
marshmallow == 2.19.2
flask-marshmallow == 0.10.1
flask-script == 2.0.6
flask-migrate == 2.5.2
psycopg2 == 2.8.2
passlib == 1.7.1
flask-jwt-extended == 3.18.2
marshmallow-sqlalchemy
解决办法是什么?
【问题讨论】:
-
你必须使用docker数据库服务名,这里是“db”,而不是“localhost”来连接。
标签: python postgresql docker docker-compose dockerfile