From 5f38d4ad2a510a78b96bac7e02ef531cf13dd329 Mon Sep 17 00:00:00 2001 From: zhangdaiscott Date: Thu, 10 Sep 2026 10:16:03 +0800 Subject: [PATCH] =?UTF-8?q?Docker=E5=90=AF=E5=8A=A8=E4=BC=98=E5=8C=96?= =?UTF-8?q?=EF=BC=9A=E5=8E=BB=E6=8E=89CMD=E7=9B=B2=E7=AD=89sleep=EF=BC=8C?= =?UTF-8?q?=E6=94=B9=E7=94=B1healthcheck+depends=5Fon=E4=BF=9D=E8=AF=81?= =?UTF-8?q?=E4=BE=9D=E8=B5=96=E5=B0=B1=E7=BB=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose-cloud.yml | 34 +++++++++++++++++-- docker-compose.yml | 18 ++++++++-- jeecg-boot/docker-compose.yml | 18 ++++++++-- .../jeecg-system-start/Dockerfile | 4 +-- .../jeecg-server-cloud/docker-compose.yml | 30 ++++++++++++++-- .../jeecg-cloud-gateway/Dockerfile | 3 +- .../jeecg-cloud-nacos/Dockerfile | 3 +- .../jeecg-demo-cloud-start/Dockerfile | 3 +- .../jeecg-system-cloud-start/Dockerfile | 3 +- .../jeecg-cloud-sentinel/Dockerfile | 3 +- 10 files changed, 103 insertions(+), 16 deletions(-) diff --git a/docker-compose-cloud.yml b/docker-compose-cloud.yml index 56fc94107..686031378 100644 --- a/docker-compose-cloud.yml +++ b/docker-compose-cloud.yml @@ -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 diff --git a/docker-compose.yml b/docker-compose.yml index 35666d290..73c16bb72 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -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 diff --git a/jeecg-boot/docker-compose.yml b/jeecg-boot/docker-compose.yml index b6e83287d..6bfc3876d 100644 --- a/jeecg-boot/docker-compose.yml +++ b/jeecg-boot/docker-compose.yml @@ -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 diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-start/Dockerfile b/jeecg-boot/jeecg-module-system/jeecg-system-start/Dockerfile index a1efa2bae..8756ddc2d 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-start/Dockerfile +++ b/jeecg-boot/jeecg-module-system/jeecg-system-start/Dockerfile @@ -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 \ No newline at end of file +# 【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 \ No newline at end of file diff --git a/jeecg-boot/jeecg-server-cloud/docker-compose.yml b/jeecg-boot/jeecg-server-cloud/docker-compose.yml index 5a37bb6af..a82a36821 100644 --- a/jeecg-boot/jeecg-server-cloud/docker-compose.yml +++ b/jeecg-boot/jeecg-server-cloud/docker-compose.yml @@ -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 diff --git a/jeecg-boot/jeecg-server-cloud/jeecg-cloud-gateway/Dockerfile b/jeecg-boot/jeecg-server-cloud/jeecg-cloud-gateway/Dockerfile index 70991152d..7b1047958 100644 --- a/jeecg-boot/jeecg-server-cloud/jeecg-cloud-gateway/Dockerfile +++ b/jeecg-boot/jeecg-server-cloud/jeecg-cloud-gateway/Dockerfile @@ -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 \ No newline at end of file +# 去掉sleep 100,直接启动(docker-compose下由command覆盖为轮询nacos等system注册后再启动) +CMD exec java -Djava.security.egd=file:/dev/./urandom -jar jeecg-cloud-gateway-3.9.5.jar \ No newline at end of file diff --git a/jeecg-boot/jeecg-server-cloud/jeecg-cloud-nacos/Dockerfile b/jeecg-boot/jeecg-server-cloud/jeecg-cloud-nacos/Dockerfile index 663ca825b..26f23d3a5 100644 --- a/jeecg-boot/jeecg-server-cloud/jeecg-cloud-nacos/Dockerfile +++ b/jeecg-boot/jeecg-server-cloud/jeecg-cloud-nacos/Dockerfile @@ -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 \ No newline at end of file +# 去掉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 \ No newline at end of file diff --git a/jeecg-boot/jeecg-server-cloud/jeecg-demo-cloud-start/Dockerfile b/jeecg-boot/jeecg-server-cloud/jeecg-demo-cloud-start/Dockerfile index 4695d40c6..c77363ca1 100644 --- a/jeecg-boot/jeecg-server-cloud/jeecg-demo-cloud-start/Dockerfile +++ b/jeecg-boot/jeecg-server-cloud/jeecg-demo-cloud-start/Dockerfile @@ -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 diff --git a/jeecg-boot/jeecg-server-cloud/jeecg-system-cloud-start/Dockerfile b/jeecg-boot/jeecg-server-cloud/jeecg-system-cloud-start/Dockerfile index 6cb0cf2f7..343826b21 100644 --- a/jeecg-boot/jeecg-server-cloud/jeecg-system-cloud-start/Dockerfile +++ b/jeecg-boot/jeecg-server-cloud/jeecg-system-cloud-start/Dockerfile @@ -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 \ No newline at end of file +# 去掉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 \ No newline at end of file diff --git a/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/Dockerfile b/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/Dockerfile index ef4a3f5aa..bd93f6981 100644 --- a/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/Dockerfile +++ b/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/Dockerfile @@ -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