У меня есть следующая настройка (упрощенная) — служба обнаружения 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:'
Код: Выделить всё
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
spring:
config:
activate:
on-profile: dev
Код: Выделить всё
eureka:
client:
service-url:
defaultZone: http://discovery:8761/eureka/
spring:
config:
activate:
on-profile: prod
Код: Выделить всё
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")}")
}
}
Код: Выделить всё
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"]
В 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
У кого-нибудь есть идеи?
Подробнее здесь: https://stackoverflow.com/questions/790 ... cker-swarm