【问题标题】:Creating a dockerfile with python and postgresql [duplicate]使用 python 和 postgresql 创建 dockerfile [重复]
【发布时间】: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


【解决方案1】:

您应该先运行 up 来启动您的容器,然后再执行迁移:

docker-compose up -d --build
docker-compose run web python migrate.py db migrate

【讨论】:

  • 仍然遇到同样的错误。这个错误的原因是什么? postgresql db 是否未启动并运行或 python 应用程序无法连接到 postgresql 并运行 db 脚本?还是我需要添加一个脚本来显式创建数据库?
  • Postgres 不在本地主机上,它在主机数据库中
  • @Jeremy,我如何找到IP?在我的烧瓶应用程序中,我有配置文件,其中包含 DB uri:SQLALCHEMY_DATABASE_URI = "postgresql://todo:todo321@localhost/todo"。所以只是这部分需要改(localhost),还是应该把主机信息也加到docker-compose.yml文件中?
  • @Jeremy,我将 DB URI 更改为 SQLALCHEMY_DATABASE_URI = "postgresql://todo:todo321@db/todo",然后运行 ​​build 命令,然后 docker-compose run web python migrate.py db migrate && python migrate.py 数据库升级。我不再收到操作错误。但是我收到一个新错误,提示文件“migrate.py”,第 1 行,在 from flask_script import Manager ModuleNotFoundError: No module named 'flask_script'。我已经发布了上面的requirement.txt 文件,它安装了flask_script。你能帮我解决这个问题吗?
猜你喜欢
  • 2019-07-30
  • 2021-09-01
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
相关资源
最近更新 更多