2017-05-15 41 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的)