Caused by: java.net.UnknownHostException: postgres
错误正在返回给我
当我运行代码而不在容器上运行时,它运行得很好。当我尝试运行容器时,它返回此错误。
Caused by: java.net.UnknownHostException: postgres
这是我的代码:
version: '3.8'
services:
app:
build:
context: .
dockerfile: Dockerfile
volumes:
- ./src:/app/src
- ./pom.xml:/app/pom.xml
ports:
- "8080:8080"
environment:
- SPRING_PROFILES_ACTIVE=test
- SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/${DATABASE_NAME_TEST}?user=${DATABASE_USERNAME}&password=${DATABASE_PASSWORD}
- SPRING_DATASOURCE_USERNAME=${DATABASE_USERNAME}
- SPRING_DATASOURCE_PASSWORD=${DATABASE_PASSWORD}
- SPRING_DATASOURCE_DRIVER_CLASS_NAME=org.postgresql.Driver
- SPRING_JPA_HIBERNATE_DDL_AUTO=update
- SPRING_SERVLET_MULTIPART_MAX_REQUEST_SIZE=10MB
- SPRING_SERVLET_MULTIPART_MAX_FILE_SIZE=10MB
- JWT_PUBLIC_KEY=classpath:public.pem
- JWT_PRIVATE_KEY=classpath:key.pem
- SPRING_DATA_MONGODB_DATABASE=${DATABASE_NAME_TEST}
- SPRING_DATA_MONGODB_PASSWORD=${DATABASE_PASSWORD}
- SPRING_DATA_MONGODB_PORT=${MONGODB_PORT}
- SPRING_DATA_MONGODB_USERNAME=${DATABASE_USERNAME}
- SPRING_DATA_MONGODB_HOST=${DATABASE_HOST}
- SPRING_DATA_MONGODB_AUTHENTICATION_DATABASE=admin
- SPRING_MAIL_HOST=${MAIL_HOST}
- SPRING_MAIL_PORT=${MAIL_PORT}
- SPRING_MAIL_USERNAME=${MAIL_USERNAME}
- SPRING_MAIL_PASSWORD=${MAIL_PASSWORD}
- SPRING_MAIL_PROPERTIES_MAIL_SMTP_AUTH=true
- SPRING_MAIL_PROPERTIES_MAIL_SMTP_STARTTLS_ENABLE=true
env_file:
- .env
depends_on:
- postgres
- mongo
postgres:
hostname: postgres
image: postgres:13
container_name: postgres
restart: always
environment:
POSTGRES_USER: ${DATABASE_USERNAME}
POSTGRES_PASSWORD: ${DATABASE_PASSWORD}
POSTGRES_DB: ${DATABASE_NAME_TEST}
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
mongo:
image: mongo:6.0
container_name: mongo
restart: always
ports:
- "27017:27017"
volumes:
- mongo_data:/data/db
environment:
MONGO_INITDB_DATABASE: ${DATABASE_NAME_TEST}
MONGO_INITDB_ROOT_USERNAME: ${DATABASE_USERNAME}
MONGO_INITDB_ROOT_PASSWORD: ${DATABASE_PASSWORD}
MONGO_INITDB_HOST: ${DATABASE_HOST}
MONGO_INITDB_PORT: ${MONGODB_PORT}
MONGO_INITDB_AUTH_DATABASE: admin
volumes:
postgres_data:
mongo_data:
我的应用程序yaml:
spring:
data:
mongodb:
database: ${DATABASE_NAME_TEST}
password: ${DATABASE_PASSWORD}
port: ${MONGODB_PORT}
username: ${DATABASE_USERNAME}
host: ${DATABASE_HOST}
authentication-database: admin
mail:
host: ${MAIL_HOST}
port: ${MAIL_PORT}
username: ${MAIL_USERNAME}
password: ${MAIL_PASSWORD}
properties:
mail:
smtp:
auth: true
starttls:
enable: true
datasource:
url: jdbc:postgresql://postgres:5432/test_financontrol?user=${DATABASE_USERNAME}&password=${DATABASE_PASSWORD}
username: ${DATABASE_USERNAME}
password: ${DATABASE_PASSWORD}
driver-class-name: org.postgresql.Driver
hikari:
maximum-pool-size: 5
jpa:
hibernate:
ddl-auto: update
show-sql: false
properties:
hibernate.format_sql: false
hibernate.id.new_generator_mappings: false
database-platform: org.hibernate.dialect.PostgreSQLDialect
jwt:
public:
key: classpath:public.pem
private:
key: classpath:key.pem
还有我的 Dockerfile :
FROM maven:3.8.4-openjdk-17-slim AS build
WORKDIR /app
COPY .env /app/.env
COPY pom.xml /app
RUN mvn dependency:go-offline
COPY src /app/src
RUN mvn clean install
FROM eclipse-temurin:17-jre-focal
COPY --from=build /app/target/*.jar /app.jar
WORKDIR /app
EXPOSE 8080
CMD ["java", "-jar", "/app.jar"]
我尝试在那时连接容器。当我在没有镜像的情况下运行 spring boot 项目时,它运行完美。
您的设置失败,因为您的 Spring 服务找不到 Postgres 数据库。发生这种情况是因为 Spring 服务不知道网络中 Postgres 数据库的正确 IP 地址。
要解决此问题,请使用
networks:
文件中的 net:
和 docker-compose.yml
选项。这些选项有助于定义一个特殊的网络供您的服务进行通信,从而允许容器解析您定义的服务名称。