簡體   English   中英

連接到Docker容器上的PostgreSQL數據庫

[英]Connect to a PostgreSQL database on a Docker container

我想在一個獨立的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

我究竟做錯了什么?

使用docker-compose時,您可以通過主機名“發現”服務。 您的數據庫服務是使用標簽postgres定義的。 將其用作應用程序配置中的主機名。

密碼和數據庫名稱也必須與您的應用配置同步。 這是通過postgres服務的環境變量完成的:

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

提供關於各種環境的文檔的圖像 vars會影響服務配置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM