Docker启动优化:去掉CMD盲等sleep,改由healthcheck+depends_on保证依赖就绪

This commit is contained in:
zhangdaiscott 2026-09-10 10:16:03 +08:00
parent ad40bfa126
commit 5f38d4ad2a
10 changed files with 103 additions and 16 deletions

View File

@ -19,6 +19,12 @@ services:
--default-authentication-plugin=caching_sha2_password
ports:
- 13306:3306
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h127.0.0.1 -uroot -proot --silent"]
interval: 10s
timeout: 5s
retries: 12
start_period: 60s
networks:
- jeecg-boot
@ -29,6 +35,11 @@ services:
restart: always
hostname: jeecg-boot-redis
container_name: jeecg-boot-redis
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 12
networks:
- jeecg-boot
@ -39,6 +50,10 @@ services:
- 9080:9080
container_name: jeecg-boot-xxljob
hostname: jeecg-boot-xxljob
# xxl_job调度表存在mysql中db/tables_xxl_job.sql需等mysql就绪
depends_on:
jeecg-boot-mysql:
condition: service_healthy
networks:
- jeecg-boot
@ -50,15 +65,26 @@ services:
- 8848:8848
- 18080:18080
container_name: jeecg-boot-nacos
# nacos配置库存在外部mysql中db/tables_nacos.sql需等mysql就绪
depends_on:
- jeecg-boot-mysql
jeecg-boot-mysql:
condition: service_healthy
hostname: jeecg-boot-nacos
# 镜像内无curl用sh内建/dev/tcp探测8848端口
healthcheck:
test: ["CMD-SHELL", "(echo > /dev/tcp/127.0.0.1/8848) 2>/dev/null"]
interval: 10s
timeout: 5s
retries: 12
start_period: 60s
networks:
- jeecg-boot
jeecg-boot-system:
depends_on:
- jeecg-boot-nacos
# 等nacos就绪后再启动应用应用Dockerfile已去掉sleep直接启动
jeecg-boot-nacos:
condition: service_healthy
build:
context: ./jeecg-boot/jeecg-server-cloud/jeecg-system-cloud-start
container_name: jeecg-system-cloud-start
@ -72,7 +98,9 @@ services:
jeecg-boot-demo:
depends_on:
- jeecg-boot-nacos
# 等nacos就绪后再启动应用应用Dockerfile已去掉sleep直接启动
jeecg-boot-nacos:
condition: service_healthy
build:
context: ./jeecg-boot/jeecg-server-cloud/jeecg-demo-cloud-start
container_name: jeecg-demo-start

View File

@ -19,6 +19,12 @@ services:
--default-authentication-plugin=caching_sha2_password
ports:
- 13306:3306
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h127.0.0.1 -uroot -proot --silent"]
interval: 10s
timeout: 5s
retries: 12
start_period: 60s
networks:
- jeecg-boot
@ -29,6 +35,11 @@ services:
restart: always
hostname: jeecg-boot-redis
container_name: jeecg-boot-redis
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 12
networks:
- jeecg-boot
@ -37,8 +48,11 @@ services:
context: ./jeecg-boot/jeecg-module-system/jeecg-system-start
restart: on-failure
depends_on:
- jeecg-boot-mysql
- jeecg-boot-redis
# 等依赖服务healthcheck通过后再启动应用应用Dockerfile已去掉sleep直接启动
jeecg-boot-mysql:
condition: service_healthy
jeecg-boot-redis:
condition: service_healthy
container_name: jeecg-boot-system
image: jeecg-boot-system
hostname: jeecg-boot-system

View File

@ -19,6 +19,12 @@ services:
--default-authentication-plugin=caching_sha2_password
ports:
- 13306:3306
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h127.0.0.1 -uroot -proot --silent"]
interval: 10s
timeout: 5s
retries: 12
start_period: 60s
networks:
- jeecg-boot
@ -29,6 +35,11 @@ services:
restart: always
hostname: jeecg-boot-redis
container_name: jeecg-boot-redis
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 12
networks:
- jeecg-boot
@ -65,8 +76,11 @@ services:
restart: on-failure
mac_address: 02:42:ac:11:00:02
depends_on:
- jeecg-boot-mysql
- jeecg-boot-redis
# 等依赖服务healthcheck通过后再启动应用应用Dockerfile已去掉sleep直接启动
jeecg-boot-mysql:
condition: service_healthy
jeecg-boot-redis:
condition: service_healthy
container_name: jeecg-boot-system
image: jeecg-boot-system
hostname: jeecg-boot-system

View File

@ -25,5 +25,5 @@ ADD ./target/jeecg-system-start-3.9.5.jar ./
RUN mkdir -p /jeecg-boot/config
# 【PR#9345】编码已通过JAVA_TOOL_OPTIONS设置CMD改用&&和exec
CMD sleep 60 && exec java -Djava.security.egd=file:/dev/./urandom -jar jeecg-system-start-3.9.5.jar
# 【PR#9345】编码已通过JAVA_TOOL_OPTIONS设置去掉sleep 60容器启动后立即拉起应用依赖库就绪由docker-compose的healthcheck+depends_on: service_healthy保证
CMD exec java -Djava.security.egd=file:/dev/./urandom -jar jeecg-system-start-3.9.5.jar

View File

@ -18,6 +18,12 @@ services:
--default-authentication-plugin=caching_sha2_password
ports:
- 13306:3306
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h127.0.0.1 -uroot -proot --silent"]
interval: 10s
timeout: 5s
retries: 12
start_period: 60s
networks:
- jeecg-boot
@ -28,6 +34,11 @@ services:
restart: always
container_name: jeecg-boot-redis
hostname: jeecg-boot-redis
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 12
networks:
- jeecg-boot
@ -66,12 +77,25 @@ services:
- 18080:18080
container_name: jeecg-boot-nacos
hostname: jeecg-boot-nacos
# nacos配置库存在外部mysql中db/tables_nacos.sql需等mysql就绪
depends_on:
jeecg-boot-mysql:
condition: service_healthy
# 镜像内无curl用sh内建/dev/tcp探测8848端口
healthcheck:
test: ["CMD-SHELL", "(echo > /dev/tcp/127.0.0.1/8848) 2>/dev/null"]
interval: 10s
timeout: 5s
retries: 12
start_period: 60s
networks:
- jeecg-boot
jeecg-boot-system:
depends_on:
- jeecg-boot-nacos
# 等nacos就绪后再启动应用应用Dockerfile已去掉sleep直接启动
jeecg-boot-nacos:
condition: service_healthy
build:
context: ./jeecg-system-cloud-start
container_name: jeecg-system-start
@ -84,7 +108,9 @@ services:
jeecg-boot-demo:
depends_on:
- jeecg-boot-nacos
# 等nacos就绪后再启动应用应用Dockerfile已去掉sleep直接启动
jeecg-boot-nacos:
condition: service_healthy
build:
context: ./jeecg-demo-cloud-start
container_name: jeecg-demo-start

View File

@ -22,4 +22,5 @@ EXPOSE 9999
ADD ./target/jeecg-cloud-gateway-3.9.5.jar ./
CMD sleep 100 && exec java -Djava.security.egd=file:/dev/./urandom -jar jeecg-cloud-gateway-3.9.5.jar
# 去掉sleep 100直接启动docker-compose下由command覆盖为轮询nacos等system注册后再启动
CMD exec java -Djava.security.egd=file:/dev/./urandom -jar jeecg-cloud-gateway-3.9.5.jar

View File

@ -22,4 +22,5 @@ EXPOSE 8848 18080
ADD ./target/jeecg-cloud-nacos-3.9.5.jar ./
CMD sleep 30 && exec java -Djava.security.egd=file:/dev/./urandom -jar jeecg-cloud-nacos-3.9.5.jar
# 去掉sleep 30容器启动后立即拉起应用MySQL就绪由docker-compose的healthcheck+depends_on: service_healthy保证
CMD exec java -Djava.security.egd=file:/dev/./urandom -jar jeecg-cloud-nacos-3.9.5.jar

View File

@ -22,4 +22,5 @@ EXPOSE 7002
ADD ./target/jeecg-demo-cloud-start-3.9.5.jar ./
CMD sleep 60 && exec java -Djava.security.egd=file:/dev/./urandom -jar jeecg-demo-cloud-start-3.9.5.jar
# 去掉sleep 60容器启动后立即拉起应用Nacos就绪由docker-compose的healthcheck+depends_on: service_healthy保证
CMD exec java -Djava.security.egd=file:/dev/./urandom -jar jeecg-demo-cloud-start-3.9.5.jar

View File

@ -22,4 +22,5 @@ EXPOSE 7001
ADD ./target/jeecg-system-cloud-start-3.9.5.jar ./
CMD sleep 60 && exec java -Djava.security.egd=file:/dev/./urandom -jar jeecg-system-cloud-start-3.9.5.jar
# 去掉sleep 60容器启动后立即拉起应用Nacos就绪由docker-compose的healthcheck+depends_on: service_healthy保证
CMD exec java -Djava.security.egd=file:/dev/./urandom -jar jeecg-system-cloud-start-3.9.5.jar

View File

@ -22,4 +22,5 @@ EXPOSE 8848
ADD ./target/jeecg-cloud-sentinel-3.9.5.jar ./
CMD sleep 5 && exec java -Djava.security.egd=file:/dev/./urandom -jar jeecg-cloud-sentinel-3.9.5.jar
# 去掉sleep 5直接启动依赖就绪由docker-compose的healthcheck+depends_on保证
CMD exec java -Djava.security.egd=file:/dev/./urandom -jar jeecg-cloud-sentinel-3.9.5.jar