无法连接到postgres容器

时间:2017-05-15 23:59:44

标签: docker docker-compose

我在postgres中定义docker-compose.yml服务器:

db:
    image: postgres:9.5
    expose:
        - 5432

然后在另一个docker容器中我尝试连接到这个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

2 个答案:

答案 0 :(得分:3)

解决方案#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配置中定义两个容器是完美的。

答案 1 :(得分:0)

取决于是不正确的。我会尝试使用其他参数,如LINKS和环境:

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)