我是一名有用的助手,可以为您翻译文本。
我正在构建我的第一个Springboot 2.0应用程序。我正在尝试将我的Springboot应用程序放入一个docker容器中,将我的PostgresDB放入另一个容器中。 我的Dockerfile:
我可以测试两个图像都已启动。从docker日志和docker事件中,我看到postgres容器运行良好,我甚至可以访问它并创建了一个数据库。 但是springboot容器启动后立即停止,因为它无法连接到postgress并抛出以下错误。
我正在构建我的第一个Springboot 2.0应用程序。我正在尝试将我的Springboot应用程序放入一个docker容器中,将我的PostgresDB放入另一个容器中。 我的Dockerfile:
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD springboot-api-demo-0.1*.jar app.jar
RUN sh -c 'touch /app.jar'
EXPOSE 9443
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/urandom -jar /app.jar" ]
我的docker-compose.yml文件
version: "2.1"
services:
springboot-api-demo:
image: "fw/springboot-api-demo"
mem_limit: 1024m
ports:
- "8080:8080"
environment:
- SPRING_PROFILES_ACTIVE=local
- AWS_REGION=local
- ENVIRONMENT=local
- AUTH_ENABLED=false
postgres:
container_name: pgdb
image: postgres:9.6-alpine
environment:
- 'POSTGRES_ROOT_PASSWORD=postgres'
- 'POSTGRES_USER=postgres'
- 'POSTGRES_PASSWORD=postgres'
ports:
- "54321:5432"
我正在使用Springboot JPA Data 2.0,并在我的application.properties中使用以下配置数据。
spring.datasource.url= jdbc:postgresql://localhost:54321/java_learning
spring.datasource.username=postgres
spring.datasource.password=postgres
我可以测试两个图像都已启动。从docker日志和docker事件中,我看到postgres容器运行良好,我甚至可以访问它并创建了一个数据库。 但是springboot容器启动后立即停止,因为它无法连接到postgress并抛出以下错误。
请注意,我的主机已经在端口5432上安装了Postgres,这就是为什么我在我的postgres容器上进行了端口映射到54321:5432的原因。这是证明:) -无法从数据库获取连接:连接尝试失败
➜ springboot-api-demo git:(master) ✗ lsof -i:54321
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
com.docke 44345 shailendra.singh 18u IPv4 0xf62897fbdd69e31d 0t0 TCP *:54321 (LISTEN)
com.docke 44345 shailendra.singh 21u IPv6 0xf62897fbdd119975 0t0 TCP localhost:54321 (LISTEN)
➜ springboot-api-demo git:(master) ✗ lsof -i:5432
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
postgres 715 shailendra.singh 5u IPv6 0xf62897fbb43e03b5 0t0 TCP localhost:postgresql (LISTEN)
postgres 715 shailendra.singh 6u IPv4 0xf62897fbbaeea9bd 0t0 TCP localhost:postgresql (LISTEN)
我不确定问题出在哪里。但是我的Springboot应用程序无法连接到我的Postgres容器,而该容器使用正确的凭据正在运行。
5432
而不是54321
。我已经编辑了我的答案。 - Anthony Raymondspringboot-api-demo
服务连接,因为服务将通过内部网络通信。只有在您将从另一台机器远程连接到db端口时才需要暴露它。 - tftd