【问题标题】:Connect to a PostgreSQL database on a Docker container连接到 Docker 容器上的 PostgreSQL 数据库
【发布时间】:2017-05-09 04:41:49
【问题描述】:

我想在单独的 Docker 容器上运行一个带有 PostgreSQL 数据库和由 Django 提供支持的 REST API 的应用程序。到目前为止,API 一直在连接到 SQLite 数据库的 Docker 上运行,但是我现在遇到了麻烦,我想改为连接到 PostgreSQL 数据库。

Docker 的docker-compose.yml 文件:

version: '2'
services:
    postgres:
        image: postgres
    api:
        build: .
        command: bash -c "python manage.py migrate && python manage.py runserver 0.0.0.0:1337"
        volumes:
            - .:/usr/src/app
        ports:
            - "1337:1337"
        depends_on:
            - postgres

Django 的settings.py(根据文档使用基本postgres 图像使用的默认设置):

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'wgomanager',
        'USER': 'postgres',
        'PASSWORD': 'mysecretpassword',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

当我使用docker-compose up 启动应用程序时,最终会抛出此错误:

api_1       |     connection = Database.connect(**conn_params)
api_1       |   File "/usr/local/lib/python3.6/site-packages/psycopg2/__init__.py", line 130, in connect
api_1       |     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
api_1       | django.db.utils.OperationalError: could not connect to server: Connection refused
api_1       |   Is the server running on host "localhost" (::1) and accepting
api_1       |   TCP/IP connections on port 5432?
api_1       | could not connect to server: Connection refused
api_1       |   Is the server running on host "localhost" (127.0.0.1) and accepting
api_1       |   TCP/IP connections on port 5432?
api_1       |
orchestrator_api_1 exited with code 1

我做错了什么?

【问题讨论】:

标签: python django postgresql docker


【解决方案1】:

使用 docker-compose 时,您可以通过主机名“发现”服务。您的数据库服务是用标签 postgres 定义的。将其用作应用程序配置中的主机名。

密码和数据库名称也必须与您的应用配置同步。这是通过 postgres 服务的环境变量完成的:

services:
  postgres:
    environment:
      - POSTGRES_PASSWORD: "mysecretpassword"
      - POSTGRES_DB: "wgomanager"
  # rest of docker-compose.yml

参考image docs 了解各种环境。 vars 影响服务配置。

【讨论】:

  • 请有人给这个人一个奖励,我花了半天时间试图让一个数据库运行。谢谢!
猜你喜欢
  • 2021-04-05
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 2020-01-14
  • 2016-04-27
  • 2020-05-30
  • 1970-01-01
  • 2015-08-28
相关资源
最近更新 更多