无法在docker中建立容器到容器的连接。 PostgreSQL 和 Spring Boot 镜像

问题描述 投票:0回答:1

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 项目时,它运行完美。

postgresql spring-boot docker docker-compose dockerfile
1个回答
0
投票

您的设置失败,因为您的 Spring 服务找不到 Postgres 数据库。发生这种情况是因为 Spring 服务不知道网络中 Postgres 数据库的正确 IP 地址。

要解决此问题,请使用

networks:
文件中的
net:
docker-compose.yml
选项。这些选项有助于定义一个特殊的网络供您的服务进行通信,从而允许容器解析您定义的服务名称。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.