mirror of
https://github.com/tiennm99/coolify.git
synced 2026-05-07 19:36:07 +00:00
feat: add Docker build cache preservation toggles and development logging
Add two new application settings to control Docker build cache invalidation: - inject_build_args_to_dockerfile (default: true) - Skip Dockerfile ARG injection - include_source_commit_in_build (default: false) - Exclude SOURCE_COMMIT from build context These toggles let users preserve Docker cache when SOURCE_COMMIT or custom ARGs change frequently. Development-only logging shows which ARGs are being injected for debugging. 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -270,6 +270,84 @@ Routes: [routes/api.php](mdc:routes/api.php)
|
||||
- **Build artifact** reuse
|
||||
- **Parallel build** processing
|
||||
|
||||
### Docker Build Cache Preservation
|
||||
|
||||
Coolify provides settings to preserve Docker build cache across deployments, addressing cache invalidation issues.
|
||||
|
||||
#### The Problem
|
||||
|
||||
By default, Coolify injects `ARG` statements into user Dockerfiles for build-time variables. This breaks Docker's cache mechanism because:
|
||||
1. **ARG declarations invalidate cache** - Any change in ARG values after the `ARG` instruction invalidates all subsequent layers
|
||||
2. **SOURCE_COMMIT changes every commit** - Causes full rebuilds even when code changes are minimal
|
||||
|
||||
#### Application Settings
|
||||
|
||||
Two toggles in **Advanced Settings** control this behavior:
|
||||
|
||||
| Setting | Default | Description |
|
||||
|---------|---------|-------------|
|
||||
| `inject_build_args_to_dockerfile` | `true` | Controls whether Coolify adds `ARG` statements to Dockerfile |
|
||||
| `include_source_commit_in_build` | `false` | Controls whether `SOURCE_COMMIT` is included in build context |
|
||||
|
||||
**Database columns:** `application_settings.inject_build_args_to_dockerfile`, `application_settings.include_source_commit_in_build`
|
||||
|
||||
#### Buildpack Coverage
|
||||
|
||||
| Build Pack | ARG Injection | Method |
|
||||
|------------|---------------|--------|
|
||||
| **Dockerfile** | ✅ Yes | `add_build_env_variables_to_dockerfile()` |
|
||||
| **Docker Compose** (with `build:`) | ✅ Yes | `modify_dockerfiles_for_compose()` |
|
||||
| **PR Deployments** (Dockerfile only) | ✅ Yes | `add_build_env_variables_to_dockerfile()` |
|
||||
| **Nixpacks** | ❌ No | Generates its own Dockerfile internally |
|
||||
| **Static** | ❌ No | Uses internal Dockerfile |
|
||||
| **Docker Image** | ❌ No | No build phase |
|
||||
|
||||
#### How It Works
|
||||
|
||||
**When `inject_build_args_to_dockerfile` is enabled (default):**
|
||||
```dockerfile
|
||||
# Coolify modifies your Dockerfile to add:
|
||||
FROM node:20
|
||||
ARG MY_VAR=value
|
||||
ARG COOLIFY_URL=...
|
||||
ARG SOURCE_COMMIT=abc123 # (if include_source_commit_in_build is true)
|
||||
# ... rest of your Dockerfile
|
||||
```
|
||||
|
||||
**When `inject_build_args_to_dockerfile` is disabled:**
|
||||
- Coolify does NOT modify the Dockerfile
|
||||
- `--build-arg` flags are still passed (harmless without matching `ARG` in Dockerfile)
|
||||
- User must manually add `ARG` statements for any build-time variables they need
|
||||
|
||||
**When `include_source_commit_in_build` is disabled (default):**
|
||||
- `SOURCE_COMMIT` is NOT included in build-time variables
|
||||
- `SOURCE_COMMIT` is still available at **runtime** (in container environment)
|
||||
- Docker cache preserved across different commits
|
||||
|
||||
#### Recommended Configuration
|
||||
|
||||
| Use Case | inject_build_args | include_source_commit | Cache Behavior |
|
||||
|----------|-------------------|----------------------|----------------|
|
||||
| Maximum cache preservation | `false` | `false` | Best cache retention |
|
||||
| Need build-time vars, no commit | `true` | `false` | Cache breaks on var changes |
|
||||
| Need commit at build-time | `true` | `true` | Cache breaks every commit |
|
||||
| Manual ARG management | `false` | `true` | Cache preserved (no ARG in Dockerfile) |
|
||||
|
||||
#### Implementation Details
|
||||
|
||||
**Files:**
|
||||
- `app/Jobs/ApplicationDeploymentJob.php`:
|
||||
- `set_coolify_variables()` - SOURCE_COMMIT conditional (~line 1960)
|
||||
- `generate_coolify_env_variables()` - SOURCE_COMMIT conditional for forBuildTime
|
||||
- `generate_env_variables()` - SOURCE_COMMIT conditional (~line 2340)
|
||||
- `add_build_env_variables_to_dockerfile()` - ARG injection toggle (~line 3358)
|
||||
- `modify_dockerfiles_for_compose()` - Docker Compose ARG injection (~line 3530)
|
||||
- `app/Models/ApplicationSetting.php` - Boolean casts
|
||||
- `app/Livewire/Project/Application/Advanced.php` - UI binding
|
||||
- `resources/views/livewire/project/application/advanced.blade.php` - Checkboxes
|
||||
|
||||
**Note:** Docker Compose services without a `build:` section (image-only) are automatically skipped.
|
||||
|
||||
### Runtime Optimization
|
||||
- **Container resource** limits
|
||||
- **Auto-scaling** based on metrics
|
||||
|
||||
Reference in New Issue
Block a user