Docker compose不会连接两个容器

时间:2019-09-03 09:29:42

标签: postgresql docker docker-compose

我有两个彼此不连接的容器: 1.我做了一个图像postgres,它从dump.sql获取数据  这是Dockerfile:

FROM postgres:11.1-alpine
COPY restore_db.sh /docker-entrypoint-initdb.d/
COPY db.sql  /backup/
ENV PGDATA=/data
  1. 然后我用docker run --name db -p 5432:5432 db创建了容器

4。我用应用制作了一张图片。用于应用程序的Dockerfile如下:

# Set the working directory to /app

WORKDIR /app
# Copy the current directory contents into the container at /app
COPY build/libs/  /app/

# Make port 80 available to the world outside this container
EXPOSE 8085

# Define environment variable
ENV NAME app

# Run app when the container launches
CMD java -jar /app/olympic-0.0.1-SNAPSHOT.jar
  1. 我用run制作了一个容器。

然后我使用docker-compose up如下文件:

version: '3'
services:
  db:
    image: db-data
    container_name: postgres
    ports:
      - 5432:5432
    volumes:
      - ./pg_data:/data
    environment:
      POSTGRES_DB: innovation
      POSTGRES_USER: postgres
      PGDATA: /data
      restart: always
  web:
    image: app
    container_name: roc
    environment:
      POSTGRES_HOST: db
    ports:
      - 8085:8085
    restart: always
    links:
      - db
```



here is property file:
```
 spring.datasource.url=jdbc:postgresql://db:5432/innovation
 spring.datasource.username=postgres
 spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
 logging.level.org.hibernate.SQL=DEBUG
 logging.level.root=INFO
 spring.output.ansi.enabled=ALWAYS
 logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

 spring.liquibase.change-log=classpath:liqubase/db.changelog-master.xml
 spring.liquibase.url=jdbc:postgresql://db:5432/innovation
 spring.liquibase.user=postgres

```

Thet are not able to be connected.

I always got an error:
org.postgresql.util.PSQLException: Connection to db:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.

1 个答案:

答案 0 :(得分:-1)

首先,我看不到两个容器在Docker文件中定义的任何网络

所以我假设它们在$ project-default网络上。

docker network inspect $project-default

将为您提供使用默认网络的所有容器的列表。

现在进入容器,假设DB是容器1 (10.1.1.2),而Spring App是容器2 (10.1.1.3)。

您可以通过运行

获得运行中的容器IP
docker inspect containerName

您将分别为db和Spring公开54328085端口

Spring内部应用容器属性文件spring.datasource.url

由于数据库位于不同的容器中,因此无法访问

localhost:5432 or db:5432(不确定数据库主机名映射到了什么)。

您可以尝试10.1.1.2:5432

从主机公开5432和8085端口时,可以访问这些端口。

例如在Windows的Docker中为192.168.99.100:5432

,但是不能从容器内部访问相同的内容。

spring.datasource.url=jdbc:postgresql://10.1.1.2:5432/innov应该在数据库已启动并正在运行的情况下工作