devcontainers / devcontainers/cli

Valid devcontainer.metadata can corrupt compose override file

Abierto
#904 2 comentarios 0 reacciones 1 asignado Reclamado por @prathameshzarkar9 Ver en GitHub
bug
Lenguaje dominante
TypeScript
Estrellas
3k
Forks
457
Merge medio
13 h 17 min
PR fusionados (30 d)
6

Descripción

dev containers version: `v0.387.0`
OS: Ubuntu 24.04

## Description

I can't get a compose file to run through devcontainers even though it runs fine from command line. The culprit seems to be a corrupted 'Features Compose Override File' generation that I don't even know how to clear.

At one point my compose.yaml file had the following environment variable set:

```
ROSCONSOLE_FORMAT: "[$${severity}] [$${walltime:%Y-%m-%d %H:%M:%S}] [$${node}]: $${message}"
```

This works in the repro example below and has worked for me in the past with docker compose running from CLI. However, it complained while I was migrating to use compose + devcontainers. From the logs below, it seems like the dictionary was getting converted to a list, and the colon in the value field doesn't play nice:

```
[2024-09-24T19:43:41.966Z] Stop (354 ms): Run: docker build -f /tmp/devcontainercli-achille/updateUID.Dockerfile-0.71.0 -t vsc-dev-docker-afd93ed1eced211ffad11c8e3235c1ce630bab41c837eddba2a4841a56df1b38-uid --platform linux/amd64 --build-arg BASE_IMAGE=gmr/customer --build-arg REMOTE_USER=gmruser --build-arg NEW_UID=1000 --build-arg NEW_GID=1000 --build-arg IMAGE_USER=gmruser /home/achille/.config/Code/User/globalStorage/ms-vscode-remote.remote-containers/data/empty-folder
[2024-09-24T19:43:41.967Z] Docker Compose override file for creating container:
services:
'customer':
image: vsc-dev-docker-afd93ed1eced211ffad11c8e3235c1ce630bab41c837eddba2a4841a56df1b38-uid
entrypoint: ["/bin/sh", "-c", "echo Container started\n
trap \"exit 0\" 15\n
\n
exec \"$$@\"\n
while sleep 1 & wait $$!; do :; done", "-", "/entrypoint.sh"]
environment:
- USER=achille
- DISPLAY=:1
- NVIDIA_VISIBLE_DEVICES=all
- NVIDIA_DRIVER_CAPABILITIES=compute,utility,display
- XAUTHORITY=
- QT_X11_NO_MITSHM=1
- ROSCONSOLE_FORMAT='[${severity}] [${walltime:%Y-%m-%d %H:%M:%S}] [${node}]: ${message}'
labels:
- 'devcontainer.local_folder=/home/achille/gmr/dev-docker'
- 'devcontainer.config_file=/home/achille/gmr/dev-docker/.devcontainer/devcontainer.json'
- 'devcontainer.metadata=[{"postCreateCommand":"/bin/bash .devcontainer/postCreate_command.sh $${containerWorkspaceFolder}","customizations":{"vscode":{"settings":{"terminal.integrated.profiles.linux":{"bash":{"path":"bash"}},"terminal.integrated.defaultProfile.linux":"bash","remote.autoForwardPorts":false},"extensions":["dotjoshjohnson.xml","zachflower.uncrustify","ms-azuretools.vscode-docker","ms-iot.vscode-ros","ms-python.python","ms-vscode.cpptools-extension-pack","redhat.vscode-yaml","smilerobotics.urdf","streetsidesoftware.code-spell-checker","twxs.cmake","yzhang.markdown-all-in-one","github.vscode-github-actions","ms-vscode.cpptools","ms-vscode.cmake-tools"]}},"mounts":["type=bind,source=/var/log/.ros,target=/var/log/.ros","type=bind,source=$${localWorkspaceFolder}/persistent_data,target=/home/gmruser/.ss","type=bind,source=$${localWorkspaceFolder}/runtime_data,target=/home/gmruser/.ss_temp","type=bind,source=/etc/ss,target=/etc/ss","type=bind,src=$${localEnv:HOME}/.ssh,target=/home/gmruser/.ssh,readonly","type=bind,src=$${localEnv:HOME}/.ssh/known_hosts,target=/home/gmruser/.ssh/known_hosts","type=bind,src=$${localEnv:HOME}/.backport/config.json,target=/home/gmruser/.backport/config.json","type=volume,target=$${containerWorkspaceFolder}/build","type=volume,target=$${containerWorkspaceFolder}/install"],"containerEnv":{"USER":"$${localEnv:USER}","DISPLAY":"$${localEnv:DISPLAY}","NVIDIA_VISIBLE_DEVICES":"all","NVIDIA_DRIVER_CAPABILITIES":"compute,utility,display","XAUTHORITY":"$${localEnv:XAUTH}","QT_X11_NO_MITSHM":"1","ROSCONSOLE_FORMAT":"''[$${severity}] [$${walltime:%Y-%m-%d %H:%M:%S}] [$${node}]: $${message}''"},"remoteUser":"gmruser"},{"postCreateCommand":"/bin/bash .devcontainer/postCreate_command.sh $${containerWorkspaceFolder}","customizations":{"vscode":{"settings":{"terminal.integrated.profiles.linux":{"bash":{"path":"bash"}},"terminal.integrated.defaultProfile.linux":"bash","remote.autoForwardPorts":false},"extensions":["dotjoshjohnson.xml","zachflower.uncrustify","ms-azuretools.vscode-docker","ms-iot.vscode-ros","ms-python.python","ms-vscode.cpptools-extension-pack","redhat.vscode-yaml","smilerobotics.urdf","streetsidesoftware.code-spell-checker","twxs.cmake","yzhang.markdown-all-in-one","github.vscode-github-actions","ms-vscode.cpptools","ms-vscode.cmake-tools"]}},"mounts":["type=bind,source=/var/log/.ros,target=/var/log/.ros","type=bind,src=/etc/ss/,dst=/etc/ss","type=bind,src=$${localEnv:HOME}/.ssh,target=/home/gmruser/.ssh,readonly","type=bind,src=$${localEnv:HOME}/.ssh/known_hosts,target=/home/gmruser/.ssh/known_hosts","type=bind,src=$${localEnv:HOME}/.backport/config.json,target=/home/gmruser/.backport/config.json","type=volume,target=/workspaces/platform/build","type=volume,target=/workspaces/platform/install","type=volume,target=$${containerWorkspaceFolder}/build","type=volume,target=$${containerWorkspaceFolder}/install"],"containerEnv":{"USER":"$${localEnv:USER}","DISPLAY":"$${localEnv:DISPLAY}","NVIDIA_VISIBLE_DEVICES":"all","NVIDIA_DRIVER_CAPABILITIES":"compute,utility,display","XAUTHORITY":"$${localEnv:XAUTH}","QT_X11_NO_MITSHM":"1","ROSCONSOLE_FORMAT":"''[$${severity}] [$${walltime:%Y-%m-%d %H:%M:%S}] [$${node}]: $${message}''"},"remoteUser":"gmruser"},{"remoteUser":"gmruser"}]'
volumes:
[...]
- vscode:/vscode
volumes:

vscode:
external: true
```

This failed with the following error:
```
[2024-09-24T19:43:41.967Z] Writing docker-compose.devcontainer.containerFeatures-1727207021967-6e5554e4-df63-43ad-ab82-77c2b36e0506.yml to /home/achille/.config/Code/User/globalStorage/ms-vscode-remote.remote-containers/data/docker-compose
[2024-09-24T19:43:41.967Z] Start: Run: docker compose --project-name dev-docker -f /home/achille/gmr/dev-docker/compose.yaml -f /home/achille/.config/Code/User/globalStorage/ms-vscode-remote.remote-containers/data/docker-compose/docker-compose.devcontainer.containerFeatures-1727207021967-6e5554e4-df63-43ad-ab82-77c2b36e0506.yml up -d
[2024-09-24T19:43:42.015Z] WARN[0000] The "message" variable is not set. Defaulting to a blank string.
[2024-09-24T19:43:42.015Z] services.customer.environment.[6]: unexpected type map[string]interface {}
```

The first thing I did was to remove the offending `ROSCONSOLE_FORMAT` variable from my `compose.yaml` file. However, `Rebuild and reopen in container` will still yield the same error. I've tried reopening the window to no avail.

When I copy the command being run `docker compose --project-name dev-docker -f /home/achille/gmr/dev-docker/compose.yaml -f /home/achille/.config/Code/User/globalStorage/ms-vscode-remote.remote-containers/data/docker-compose/docker-compose.devcontainer.containerFeatures-1727207021967-6e5554e4-df63-43ad-ab82-77c2b36e0506.yml up -d` and modify the `containerFeatures` compose file and remove the offending line manually and then run this command from the terminal, it works fine. But this file gets regenerated every time I run 'reopen in container'.

I've tried:
* clearing the user data folder `rm -rf /home/achille/.config/Code/User/globalStorage/ms-vscode-remote.remote-containers/data`
* clearing all files in `~/.config/Code` dir that had a reference to `ROSCONSOLE_FORMAT`, including
* `~/.config/Code/User/globalStorage/state.vscdb`
* `~/.config/Code/User/workspaceStorage/594f8f796eef47d970635b16d002a443/state.vscdb`
* `rm /tmp/devcontainercli-achille/container-features/0.71.0-1727210272333/Dockerfile-with-features`
* `rm /var/lib/containerd/io.containerd.metadata.v1.bolt/meta.db`

EDIT: I've found that the issue stems from the devcontainer.metadata that's attached to the image being used. That image was created using devcontainers and has the `ROSCONSOLE_FORMAT` baked into it, which this compose override file generation seems to be using. Removing the environment variable from the original image solved the issue. I will update the repro repository accordingly.

## Repro

EDIT: repro [here](https://github.com/Achllle/devcontainer_issues)

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.