devcontainers / devcontainers/spec
containerEnv and remoteEnv issues in devcontainer and devcontainer-feature
- Dominant language
- No language data
- Stars
- 5.7k
- Forks
- 496
- PR merge metrics
- No merged PRs in 30d
Description
related issues:
- https://github.com/microsoft/vscode-remote-release/issues/7766
docs:
- https://containers.dev/implementors/json_reference/
- https://containers.dev/implementors/features/
First test a `devcontainer.json`:
```json
{
"image": "mcr.microsoft.com/devcontainers/base:ubuntu-22.04",
"containerEnv": {
"WHATEVER1": "WHATEVER1",
"WHATEVER2": "$WHATEVER1",
"WHATEVER3": "${containerEnv:WHATEVER1}",
"WHATEVER4": "${remoteEnv:R_WHATEVER1}",
"WHATEVER5": "${containerEnv:HOME}",
"WHATEVER6": "${remoteEnv:HOME}",
"WHATEVER7": "$HOME",
"WHATEVER8": "${localEnv:HOME}"
},
"remoteEnv": {
"R_WHATEVER1": "WHATEVER1",
"R_WHATEVER2": "$WHATEVER1",
"R_WHATEVER3": "${containerEnv:WHATEVER1}",
"R_WHATEVER4": "${remoteEnv:R_WHATEVER1}",
"R_WHATEVER5": "${containerEnv:HOME}",
"R_WHATEVER6": "${remoteEnv:HOME}",
"R_WHATEVER7": "$HOME",
"R_WHATEVER8": "${localEnv:HOME}",
"PATH": "${containerEnv:PATH}:WHATEVER/bin"
}
}
```
build and check the env:
```
$ env | sort | grep WHATEVER
PATH=/vscode/vscode-server/bin/linux-x64/<...>/bin/remote-cli:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:WHATEVER/bin:/home/vscode/.local/bin
R_WHATEVER1=WHATEVER1
R_WHATEVER2=$WHATEVER1
R_WHATEVER3=WHATEVER1
R_WHATEVER4=${remoteEnv:R_WHATEVER1}
R_WHATEVER5=
R_WHATEVER6=${remoteEnv:HOME}
R_WHATEVER7=$HOME
R_WHATEVER8=/home/ubuntu
WHATEVER1=WHATEVER1
WHATEVER2=$WHATEVER1
WHATEVER3=${containerEnv:WHATEVER1}
WHATEVER4=${remoteEnv:R_WHATEVER1}
WHATEVER5=${containerEnv:HOME}
WHATEVER6=${remoteEnv:HOME}
WHATEVER7=$HOME
WHATEVER8=/home/ubuntu
```
Then the `devcontainer-feature.json`, `remoteEnv` is not allowed, and **all** the `${*:*}` pattern will throw an error:
```json
{
"name": "containerenv",
"id": "containerenv",
"version": "1.0.0",
"description": "",
"containerEnv": {
"WHATEVER1": "WHATEVER1",
"WHATEVER2": "$WHATEVER1",
"WHATEVER7": "$HOME"
},
"installsAfter": [
"ghcr.io/devcontainers/features/common-utils"
]
}
```
build and check the env:
```
$ env | sort | grep WHATEVER
WHATEVER1=WHATEVER1
WHATEVER2=WHATEVER1
WHATEVER7=
```
I have some questions:
1. Is it possible that the `devcontainer-feature.json` keep the same logic of containerEnv & remoteEnv with `devcontainer.json` in the future? Or at least support the `${localEnv:*}`?
2. Check the outputs, have you considered about evaluating these as empty string? Similar with the behavior of shell.
```
$ env | sort | grep WHATEVER
R_WHATEVER4=${remoteEnv:R_WHATEVER1}
R_WHATEVER6=${remoteEnv:HOME}
WHATEVER3=${containerEnv:WHATEVER1}
WHATEVER4=${remoteEnv:R_WHATEVER1}
WHATEVER5=${containerEnv:HOME}
WHATEVER6=${remoteEnv:HOME}
```
Contributor guide
Assessment
This issue has not been assessed yet.