devcontainers / devcontainers/cli

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

Đang mở
#1,211 0 bình luận 0 reaction 1 người được giao Được @v-Kaniska244 nhận Xem trên GitHub
Ngôn ngữ chính
TypeScript
Star
3k
Fork
457
Merge trung bình
13 giờ 17 phút
Pull request đã merge (30 ngày)
6

Mô tả

## 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:
```yaml
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)
```yaml
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
```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
```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](https://code.visualstudio.com/docs/devcontainers/compose#_multiple-docker-compose-devcontainers), 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

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.