2017-05-15 89 views
2

docker-compose.yml定義postgres服務器:無法連接到Postgres的容器

db: 
    image: postgres:9.5 
    expose: 
     - 5432 

然後在另一個泊塢窗容器我試圖連接到這個Postgres的容器。但是它給出了警告的錯誤:

Is the server running on host "db" (172.22.0.2) and accepting 
data-service_1 | TCP/IP connections on port 5432? 

爲什麼容器無法提供的資料(host =「DB」,並port = 5432)連接到另一臺?

PS 全部docker-compose.yml

version: "2" 
services: 
    data-service: 
     build: . 
     depends_on: 
      - db 
     ports: 
      - "50051:50051" 
    db: 
     image: postgres:9.5 
     depends_on: 
      - data-volume 
     environment: 
      - POSTGRES_USER=cobrain 
      - POSTGRES_PASSWORD=a 
      - POSTGRES_DB=datasets 
     ports: 
      - "8000:5432" 
     expose: 
      - 5432 
     volumes_from: 
      - data-volume 
      # - container:postgres9.5-data 
     restart: always 

    data-volume: 
     image: busybox 
     command: echo "I'm data container" 
     volumes: 
      - /var/lib/postgresql/data 
+0

請張貼滿'泊塢窗,compose.yml' –

+0

@AlexKarshin我加入吧。 –

回答

2

解決方案#1。相同的文件。

爲了能夠訪問db容器,您必須在docker-compose.yml的上下文中定義其他容器。當容器啓動時,每個容器都獲得映射到/etc/hosts中的所有其他容器。

只是做

version: '2' 
services: 
    web: 
    image: your/image 
    db: 
    image: postgres:9.5 

如果你不想把你的其他容器到同一docker-compose.yml,還有其他的解決方案:

解決方案2。 IP

執行docker inspect <name of your db container>並在結果列表中查找IPAddress指令。使用該IPAddress作爲主機來連接。

解決方案#3。網絡

使您的容器加入同一網絡。爲此,各種服務下,定義:

services: 
    db: 
    networks: 
    - myNetwork 

不要忘記更改db你每開始容器。

我通常會在開發過程中使用第一個解決方案。我使用apache+php作爲一個容器,而pgsql作爲另一個容器,每個項目都有一個單獨的DB。我不會啓動多個設置docker-compose.yml,因此在這種情況下,將兩個容器定義在一個.yml配置中是完美的。

+0

但是'build:.'和'image:your/image'是一樣的。我看不出解決方案1和我的解決方案之間的區別。 –

+0

其實,仔細檢查,我覺得'depends_on'可能會給你帶來問題,因爲你正在定義一個遞歸依賴關係 –

+0

遞歸?不,它只是一個依賴關係鏈'數據服務 - >數據庫 - >數據volume'。 –

0

依賴於不正確。我會嘗試使用其他paramters像鏈接和環境:

version: "2" 
    services: 
     data-service: 
      build: . 
      links: 
       - db 
      ports: 
       - "50051:50051" 
      volumes_from: ["db"] 
      environment: 
       DATABASE_HOST: db 
     db: 
      image: postgres:9.5 
      environment: 
       - POSTGRES_USER=cobrain 
       - POSTGRES_PASSWORD=a 
       - POSTGRES_DB=datasets 
      ports: 
       - "8000:5432" 
      expose: 
       - 5432 
      #volumes_from: 
       #- data-volume 
       # - container:postgres9.5-data 
      restart: always 

     data-volume: 
      image: busybox 
      command: echo "I'm data container" 
      volumes: 
       - /var/lib/postgresql/data 

這個工作對我來說(不Postgres的,但MySQL的)

相關問題