【问题标题】:Docker-compose: App container can't connect to PostgresDocker-compose:应用程序容器无法连接到 Postgres
【发布时间】:2018-05-31 15:05:06
【问题描述】:

使用 docker-compose,我试图从 manage.py runserver 查看与 postgres 图像连接的 Flask 应用程序,但出现以下错误:

sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not connect to server: Connection refused
    Is the server running on host "0.0.0.0" and accepting
    TCP/IP connections on port 5432? 

我的撰写文件

version: '3.1'
services:
  app:
    build: .
    ports:
      - 5000:5000
    volumes:
      - /Users/sammy/Projects/my_flask_app:/my_flask_app
    container_name: my_flask_app_1
    depends_on:
      - db
    entrypoint: ["python", "manage.py", "runserver"]
  db:
    image: postgres:10
    restart: always
    container_name: my_app_db_1
    environment:
      POSTGRES_USER: ubuntu
      POSTGRES_PASSWORD: pickles
      POSTGRES_DB: db
    ports:
      - 5432:5432

来自我的应用程序的settings.py 文件

POSTGRES = {
    'user': "ubuntu",
    'pw': "pickles",
    'db': "db",
    'host': os.getenv('IP', '0.0.0.0'),
    'port': '5432',
}
SQLALCHEMY_DATABASE_URI = 'postgresql://%(user)s:\
%(pw)s@%(host)s:%(port)s/%(db)s' % POSTGRES

它可以很好地构建和运行应用程序,因为我可以访问该站点并查看 Werkzeug 回溯解释器。我在 Postgres 容器本身的配置或我的 Flask 与它的连接上都失败了。

  • 环境变量是否正确?
  • 我需要为数据库指定一个卷吗?如果是这样,为什么?除了将用户名/密码放入环境变量之外,我还没有理解这一点。

【问题讨论】:

  • 你的主机应该是“db”

标签: postgresql docker flask docker-compose


【解决方案1】:

settings.py 文件中的主机应该是“db”。 compose 会在内部网络上公开与您的服务具有相同主机名的主机。

POSTGRES = {
    'user': "ubuntu",
    'pw': "pickles",
    'db': "db",
    'host': "db",
    'port': '5432',
}

【讨论】:

  • 您是否建议我在撰写文件中添加-host 标志?你知道我可以参考的任何例子吗?
  • 谢谢。我没有意识到服务的名称是容器的主机名。这是巨大的。
猜你喜欢
  • 2019-07-30
  • 1970-01-01
  • 1970-01-01
  • 2020-12-23
  • 1970-01-01
  • 2021-10-25
  • 2019-08-11
  • 2019-11-15
  • 1970-01-01
相关资源
最近更新 更多