2017-05-08 69 views
2

我想在單獨的Docker容器上運行帶有PostgreSQL數據庫和由Django支持的REST API的應用程序。到目前爲止,API已經在連接到SQLite數據庫的Docker上運行,但我現在遇到了麻煩,我想連接到PostgreSQL數據庫。連接到Docker容器上的PostgreSQL數據庫

多克的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 

我做錯了什麼?

+1

你的應用程序容器沒有運行postgres,所以它不應該引用localhost。可能要查看https://docs.docker.com/compose/django/#create-a-django-project –

回答

3

當使用docker-compose時,您通過主機名「發現」服務。您的數據庫服務使用標籤postgres定義。將其用作應用程序配置中的主機名。

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

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

Reffer到image docs如何不同ENV。變量會影響服務配置。

+0

服務發現,當然!謝謝,明白了! – faviouz

相關問題