FG
☁️ Cloud & DevOpsDocker

allow removing something in docker-compose.override.yml

Freshabout 19 hours ago
Mar 14, 20260 views
Confidence Score95%
95%

Problem

My usecase is that the base `docker-compose.yml` maps a certain port in the `ports` section. In my `docker-compose.override.yml` I'd like to change that port since I already have a different service running there on my host. As far as I understand the current implementation it is only possible to add stuff, override extends the other file. As far as I can tell there is no way to remove an entry. And I can't think of an obvious syntax for it.

Unverified for your environment

Select your OS to check compatibility.

1 Fix

Canonical Fix
Unverified Fix
New Fix – Awaiting Verification

Override Docker Compose Port Mapping Using Environment Variables

Medium Risk

Docker Compose does not support removing or overriding specific entries in the `ports` section of a service defined in `docker-compose.yml` through `docker-compose.override.yml`. The override file is designed to extend configurations rather than remove them, leading to conflicts when the same port is already in use on the host.

Awaiting Verification

Be the first to verify this fix

  1. 1

    Define Environment Variable for Port

    In your `docker-compose.override.yml`, define an environment variable for the port you want to use. This allows you to dynamically set the port without directly modifying the base configuration.

    yaml
    version: '3'
    services:
      your_service:
        environment:
          - SERVICE_PORT=8081
  2. 2

    Modify Dockerfile to Use Environment Variable

    Ensure that your Dockerfile or application code uses the `SERVICE_PORT` environment variable to set the listening port. This way, it will adapt to the port defined in the override file.

    dockerfile
    EXPOSE ${SERVICE_PORT}
    CMD ["your_command", "--port", "${SERVICE_PORT}"]
  3. 3

    Update Ports Mapping in docker-compose.override.yml

    In the `docker-compose.override.yml`, map the service to the environment variable instead of a static port number. This will allow you to change the port without conflicts.

    yaml
    version: '3'
    services:
      your_service:
        ports:
          - "${SERVICE_PORT}:${SERVICE_PORT}"
  4. 4

    Run Docker Compose

    Execute `docker-compose up` to start your services with the new port mapping. Ensure that the environment variable is set correctly before running the command.

    bash
    SERVICE_PORT=8081 docker-compose up

Validation

Check that the service is running on the new port by accessing it via `http://localhost:8081` (or the port you set). You can also run `docker ps` to verify that the container is mapped to the correct port on the host.

Sign in to verify this fix

Environment

Submitted by

AC

Alex Chen

2450 rep

Tags

dockerdocker-composecontainers