Приложение Spring не получает профили приложений в Docker SwarmJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Приложение Spring не получает профили приложений в Docker Swarm

Сообщение Anonymous »

(Я новичок в Spring, не ешьте меня заживо).
У меня есть следующая настройка (упрощенная) — служба обнаружения Eureka и пользовательская служба.
Предположим, что Eureka настроена правильно и работает (поскольку она работает, она исправна, она регистрирует службы, работает как локально, так и в Docker Swarm).
Служба пользователей , однако вообще не получает конфигурацию application-prod.yml в Docker Swarm (запущенном через Compose) и все еще пытается подключиться к порту localhost:8761, когда он должен подключиться к Discovery:8761. Я вижу, что профиль загружается как «prod» в журналах.
Вот конфигурации для пользовательской службы (и Dockerfile):
application.yml

Код: Выделить всё

eureka:
client:
register-with-eureka: true
fetch-registry: true
healthcheck:
enabled: true

server:
port: 9000

spring:
application:
name: auth
cloud:
config:
discovery:
enabled: true
service-id: configserver
name: ${spring.application.name}
fail-fast: false
retry:
initialInterval: 5000
maxInterval: 15000
maxAttempts: 10
config:
import: 'optional:configserver:'
application-dev.yml

Код: Выделить всё

eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/

spring:
config:
activate:
on-profile: dev
application-prod.yml

Код: Выделить всё

eureka:
client:
service-url:
defaultZone: http://discovery:8761/eureka/

spring:
config:
activate:
on-profile: prod
build.gradle.kts

Код: Выделить всё

configurations {
compileOnly {
extendsFrom(configurations.annotationProcessor.get())
}
}

extra["springCloudVersion"] = "2023.0.3"

dependencies {
// Spring Authorization Server
implementation("org.springframework.boot:spring-boot-starter-oauth2-authorization-server")
implementation("org.springframework.security:spring-security-oauth2-authorization-server")
implementation("org.springframework.boot:spring-boot-starter-oauth2-resource-server")
implementation("org.springframework.boot:spring-boot-starter-security")

// For JWT support
implementation("io.jsonwebtoken:jjwt-api:0.11.5")
runtimeOnly("io.jsonwebtoken:jjwt-impl:0.11.5")
runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.11.5")

// Communication
implementation("org.springframework.boot:spring-boot-starter-amqp")

// Dev dependencies
developmentOnly("org.springframework.boot:spring-boot-devtools")

// Cloud capacity
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.springframework.cloud:spring-cloud-starter-config")
implementation("org.springframework.cloud:spring-cloud-starter-netflix-eureka-client")
}

dependencyManagement {
imports {
mavenBom("org.springframework.cloud:spring-cloud-dependencies:${property("springCloudVersion")}")
}
}
Файл Docker

Код: Выделить всё

FROM emilavramov/java-temurin-21-gradle AS builder

WORKDIR /app

RUN rm -rf ~/.gradle/caches

COPY gradle gradle
COPY build.gradle.kts build.gradle.kts
COPY settings.gradle.kts settings.gradle.kts

RUN gradle dependencies --no-build-cache --parallel --no-daemon

COPY .  .

RUN gradle :auth:bootJar --no-build-cache --parallel --no-daemon

# Stage 2: Create a minimal deployment image with just the JRE
FROM eclipse-temurin:21-jre-alpine AS deploy

WORKDIR /app

COPY --from=builder /app/auth/build/libs/auth-*.jar /app/auth.jar

EXPOSE 9000

ENTRYPOINT ["java", "-jar", "/app/auth.jar", "--spring.profiles.active=prod"]

Когда я запускаю пользовательскую службу локально с помощью bootRun --spring.profiles.active=prod, она подхватывает ее и пытается подключиться к несуществующему обнаружению: 8761, когда я запускаю он с dev, он правильно подключается к localhost:8761 и регистрируется в Eureka (также обнаруживает сервер конфигурации, который я пропустил для простоты, и извлекает из него конфигурации по умолчанию и определения).
В Docker Swarm однако он не работает.
это мой docker-compose.yml (некоторые сервисы опущены для простоты)

Код: Выделить всё

services:
discovery:
image: discovery:latest
ports:
- 8761:8761
build:
context: ./
dockerfile: discovery/Dockerfile
networks:
- app-network
deploy:
replicas: 1
restart_policy:
condition: on-failure
update_config:
parallelism: 1
delay: 10s
healthcheck:
test: "wget -T5 -qO- http://localhost:8761/actuator/health | grep UP || exit 1"
interval: 10s
timeout: 10s
retries: 3
start_period: 10s

user:
image: user:latest
build:
context: ./
dockerfile: user/Dockerfile
networks:
- app-network
depends_on:
- discovery
- configserver
deploy:
replicas: 1
restart_policy:
condition: on-failure
update_config:
parallelism: 1
delay: 10s
healthcheck:
test: "wget -T5 -qO- http://localhost:9001/actuator/health | grep UP || exit 1"
interval: 30s
timeout: 10s
retries: 3
start_period: 25s

networks:
app-network:
driver: overlay
Несколько дней я ломал голову над этим, но безрезультатно, мой сервер конфигурации правильно подхватывает application-prod.yml и подключается к обнаружению (конфигурации eureka идентичны пользовательской службе ), но пользователь этого не делает — он все еще пытается подключиться к локальному хосту, несмотря на то, что находится в режиме prod. Файлы приложения находятся в JAR (в контейнере) и в пути к классам.
У кого-нибудь есть идеи?

Подробнее здесь: https://stackoverflow.com/questions/790 ... cker-swarm
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Приложение Spring не получает профили приложений в Docker Swarm
    Anonymous » » в форуме JAVA
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Могут ли все контейнеры Docker из Docker Swarm войти в один и тот же файл журнала?
    Anonymous » » в форуме Python
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous
  • Могут ли все контейнеры Docker из Docker Swarm войти в один и тот же файл журнала?
    Anonymous » » в форуме Linux
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Приложение Symfony в режиме Docker Swarm с несколькими репликами, проблема с сеансом?
    Anonymous » » в форуме Php
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Метрики Prometheus с Docker Swarm
    Anonymous » » в форуме Python
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»