我有两个彼此不连接的容器: 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
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
然后我使用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.
答案 0 :(得分:-1)
首先,我看不到两个容器在Docker文件中定义的任何网络
所以我假设它们在$ project-default网络上。
docker network inspect $project-default
将为您提供使用默认网络的所有容器的列表。
现在进入容器,假设DB是容器1 (10.1.1.2),而Spring App是容器2 (10.1.1.3)。
您可以通过运行
获得运行中的容器IPdocker inspect containerName
您将分别为db和Spring公开5432
和8085
端口
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
应该在数据库已启动并正在运行的情况下工作