From 26fe7c4fc037ded0feceefb5c7771dfb76197351 Mon Sep 17 00:00:00 2001 From: hamed <15238-genius.ha@users.noreply.drupalcode.org> Date: Sun, 28 Jun 2026 09:57:11 +0330 Subject: [PATCH] fix(docker): implement retry logic for package installation and optimize image usage in docker-compose --- Dockerfile | 11 ++++++++--- docker-compose.yml | 16 ++++++++-------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/Dockerfile b/Dockerfile index e5035b0b..6b110232 100644 --- a/Dockerfile +++ b/Dockerfile @@ -33,10 +33,15 @@ FROM php:8.2-fpm-alpine AS runtime # System deps + PHP extensions. # pdo_mysql -> MariaDB, intl -> Symfony, opcache -> perf, redis -> Messenger/cache transport -RUN apk add --no-cache nginx supervisor icu-libs \ - && apk add --no-cache --virtual .build-deps $PHPIZE_DEPS icu-dev \ +# apk/pecl fetch over the network; on busy build hosts the mirror occasionally +# drops a connection. retry() wraps each network step so a transient failure +# doesn't abort the whole deploy. +RUN set -eu; \ + retry() { for i in 1 2 3 4 5; do "$@" && return 0; echo "retry $i: $*"; sleep 5; done; return 1; }; \ + retry apk add --no-cache nginx supervisor icu-libs \ + && retry apk add --no-cache --virtual .build-deps $PHPIZE_DEPS icu-dev \ && docker-php-ext-install pdo_mysql intl opcache \ - && pecl install redis \ + && retry pecl install redis \ && docker-php-ext-enable redis \ && apk del .build-deps diff --git a/docker-compose.yml b/docker-compose.yml index b45653f1..e377257e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -49,6 +49,10 @@ services: # CORS/payload allow-listing for those frontends is handled separately via # CORS_ALLOW_ORIGIN / ALLOWED_FRONTEND_HOSTS (see docker/frontend-domains.json). app: + # Shared image tag — app builds it once; the two workers reuse the SAME image + # (image: below, no build:). Without this Coolify builds the Dockerfile 3×, + # tripling apk/pecl network fetches and intermittently failing on the host. + image: clinicpro-app:latest build: context: . dockerfile: Dockerfile @@ -65,11 +69,9 @@ services: retries: 5 start_period: 60s - # SMS / async message consumer. + # SMS / async message consumer. Reuses the image built by `app` (no build:). worker-async: - build: - context: . - dockerfile: Dockerfile + image: clinicpro-app:latest restart: unless-stopped command: php bin/console messenger:consume async --time-limit=3600 --memory-limit=128M -v environment: @@ -78,11 +80,9 @@ services: volumes: *app-volumes depends_on: *app-depends - # Scheduler consumer — expires unpaid appointments every minute. + # Scheduler consumer — expires unpaid appointments every minute. Reuses app's image. worker-scheduler: - build: - context: . - dockerfile: Dockerfile + image: clinicpro-app:latest restart: unless-stopped command: php bin/console messenger:consume scheduler_default --time-limit=3600 -v environment: