2016-07-18 59 views
1

我爲django應用程序創建docker-compose配置,Dockerfile生成成功,但是當我編寫它們時,django返回一個問題 - 無法連接到postgres。docker-compose不啓動postgres

我運行docker-compose運行web bash,發現redis和posgres都無法連接。

我的搬運工,compose.yml文件運行sudo的碼頭工人,組成了我得到以下錯誤,當

web: 
build: . 
    ports: 
    - "8000:8000" 
environment: 
    - 'DATABASE_HOST=db' 
    - 'DATABASE_NAME=mydb' 
    - 'DATABASE_USER=root' 
    - 'DATABASE_PASSWORD=root' 
links: 
    - db 
db: 
    image: postgres:9.1 

web_1 | File "/usr/local/lib/python2.7/site packages/django/db/backends/postgresql/base.py", line 175, in get_new_connection 

web_1 |  connection = Database.connect(**conn_params) 
web_1 | File "/usr/local/lib/python2.7/site-packages/psycopg2/__init__.py", line 164, in connect 
web_1 |  conn = _connect(dsn, connection_factory=connection_factory, async=async) 
web_1 | django.db.utils.OperationalError: could not connect to server: Connection refused 
web_1 |  Is the server running on host "localhost" (::1) and accepting 
web_1 |  TCP/IP connections on port 5432? 
web_1 | could not connect to server: Connection refused 
web_1 |  Is the server running on host "localhost" (127.0.0.1) and accepting 
web_1 |  TCP/IP connections on port 5432? 
+0

你有什麼在你的Django設置中使用這些環境變量來定義數據庫? –

+0

我的Django的設置是:'數據庫= { '默認':{ 的 '發動機': 'django.db.backends.postgresql_psycopg2', 'NAME': 'aiotadb', '用戶': '根', '密碼': '根', 'HOST': '分貝', 'PORT': '5432', } }' –

+0

還通過改變' 'HOST' 嘗試:在設置文件'localhost''和改變Docker-compose.yml .still中的''DATABASE_HOST = localhost''面臨同樣的問題。 –

回答

2

我還內置了聚類docker-compose,它可能會幫助你,並回答您的問題(這裏是repo)。您可以看到docker-compose.yml文件和djangosettings文件(我標記了您需要的行)。

您也可以克隆該回購協議,並得到djangoangular2postgresql,並nginx容器,所有鏈接在一起了。

+0

謝謝@Nir我也嘗試過這些,但仍然錯誤是相同的*服務器運行在主機「本地主機」(:: 1)和接受*。我已經嘗試碼頭使用sqlite3,它的工作作爲魅力。 –

+0

@AshishK。注意我的docker-compose.yml文件,我的'server'(django)'depends_on'數據庫。這意味着'server'容器將一直等待'database'容器並在其之後旋轉,而不是之前。另外,上傳你的'settings.py'文件,注意''HOST':'database''和''PORT':5432'(我認爲這是你的問題,你的主機應該是數據庫容器的名字)。 – Nir

+0

Thanks.Found the issue.Running now now。 –

0

您正在將您的Web容器鏈接到postgres容器,但您沒有定義數據庫名稱,密碼和用戶。

web: 
    build: . 
    ports: 
    - "8000:8000" 
    links: 
    - db 
    db: 
    restart: always 
    image: postgres:9.1 
    ports: 
     - "5432:5432" 
    volumes: 
     - pgvolume:/var/lib/postgresql/data 
    environment: 
     - POSTGRES_PASSWORD=root 
     - POSTGRES_DB= aiotadb 
     - POSTGRES_USER=root 
    data: 
    restart: always 
    image: postgres:9.1 
    volumes: 
     - /var/lib/postgresql 
    command: tail -f /dev/null 

另外,如果你已經在你的設置文件中定義的數據庫選項,你不需要把它聲明爲在Web容器ENV變量。