Multiple services in docker-compose with separate devcontainer.json files - only one service gets features installed

Open
#1,211 0 comments 0 reactions 1 assignee View on GitHub

@v-Kaniska244 is already working on this.

Since Apr 27, 2026.

Assessment

This issue has not been assessed yet.

Description

Bug Report

Description
When using a single docker-compose.yml file with multiple services, each having their own separate .devcontainer/devcontainer.json files, only one service gets its features installed. The service that is started first gets its features correctly installed, while the second service is missing its configured features.

Additionally, using devcontainer up on one service causes the other service's container to be rebuilt, even though they should be independent.

Root Cause

The devcontainer CLI generates a single temporary containerFeatures override file for the entire docker-compose project, instead of generating per-service override files. This temporary file only contains the configuration for the service that was most recently processed, causing the other service's features to be ignored.

Evidence

1. Both containers reference the same temporary file

Container labels show both containers pointing to the identical temporary override file:

com.docker.compose.project.config_files: /var/folders/.../docker-compose.devcontainer.containerFeatures-1777044430151-115a3236-0fb3-4ab5-bdb6-d1baa4463613.yml
2. Temporary file only contains one service's configuration

The temporary override file (docker-compose.devcontainer.containerFeatures-*.yml) only contains configuration for the reportify service:

services:
  'reportify':
    entrypoint: ["/bin/sh", "-c", "echo Container started\n..."]
    labels:
      - 'devcontainer.local_folder=/Users/shihaonan/.devcontainer/xiaobangtouzi/reportify'
      - 'devcontainer.config_file=/Users/shihaonan/.devcontainer/xiaobangtouzi/reportify/.devcontainer/devcontainer.json'

The duplik service configuration is completely missing from this file.

3. Container metadata confirms missing features

When inspecting the containers:

  • reportify container: devcontainer.metadata label includes Python feature
  • duplik container: devcontainer.metadata label is missing the Python feature

When executing commands inside containers:

  • reportify container: Has Python 3.11.15 installed ✓
  • duplik container: No Python installed ✗

Configuration

docker-compose.yml (shared by both services)
services:
  duplik:
    build:
      context: ./duplik
      dockerfile: Dockerfile
    volumes:
      - src:/workspaces
    command: sleep infinity

  reportify:
    build:
      context: ./reportify
      dockerfile: Dockerfile
    volumes:
      - src:/workspaces
    command: sleep infinity

volumes:
  src:
duplik/.devcontainer/devcontainer.json
{
  "name": "Duplik Development",
  "dockerComposeFile": "../../docker-compose.yml",
  "service": "duplik",
  "workspaceFolder": "/workspaces/duplik",
  "features": {
    "ghcr.io/devcontainers/features/python:1": {
      "version": "3.10"
    }
  },
  "onCreateCommand": "/root/.devcontainer/init.sh",
  "postStartCommand": "cd ~/.config/nvim && git pull --rebase",
  "overrideCommand": false,
  "runServices": [],
  "remoteUser": "root"
}
reportify/.devcontainer/devcontainer.json
{
  "name": "Reportify Development",
  "dockerComposeFile": "../../docker-compose.yml",
  "service": "reportify",
  "workspaceFolder": "/workspaces/reportify",
  "features": {
    "ghcr.io/devcontainers/features/python:1": {
      "version": "3.11"
    },
    "ghcr.io/devcontainers-extra/features/poetry:2": {}
  },
  "onCreateCommand": "/root/.devcontainer/init.sh",
  "postStartCommand": "cd ~/.config/nvim && git pull --rebase",
  "overrideCommand": false,
  "runServices": [],
  "remoteUser": "root"
}

Expected Behavior

According to VS Code Dev Containers documentation, it is officially supported to have:

  • A single docker-compose.yml file
  • Multiple services
  • Each service with its own separate .devcontainer/devcontainer.json file

Expected: Each service should have its own features installed independently, and starting one service should not cause the other to rebuild.

Actual Behavior

  • Only one service gets its features installed (the one that was processed first/last by the CLI)
  • The other service is missing all configured features
  • Using devcontainer up on one service causes the other service's container to be rebuilt

Environment

  • OS: macOS (Darwin 25.4.0)
  • Docker Desktop latest
Dominant language
TypeScript
Stars
3k
Forks
461
Avg merge
13h 17m
Merged PRs (30d)
6

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from devcontainers/cli

All issues in devcontainers/cli

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.