Description
When remoteUser is set to a non-root user in devcontainer.json, extensions specified via the extensions option are installed to /root/.local/share/code-server/extensions/ during the build phase.
At runtime, code-server runs as the remoteUser and looks in ~remoteUser/.local/share/code-server/extensions/, so the installed extensions are not visible.
Reproduction
{
"remoteUser": "vscode",
"features": {
"ghcr.io/coder/devcontainer-features/code-server:1": {
"extensions": "ms-python.python,dbaeumer.vscode-eslint"
}
}
}
# Extensions exist under root but not under remoteUser
$ sudo ls /root/.local/share/code-server/extensions/
dbaeumer.vscode-eslint-3.0.20-universal
ms-python.python-2026.0.0-universal
$ ls ~/.local/share/code-server/extensions/
# (empty)
Cause
In install.sh, the extension installation runs as root without switching to $_REMOTE_USER:
for extension in "${extensions[@]}"
do
code-server --install-extension "$extension"
done
$_REMOTE_USER is available and used correctly in the entrypoint generation below, but not here.
Description
When
remoteUseris set to a non-root user indevcontainer.json, extensions specified via theextensionsoption are installed to/root/.local/share/code-server/extensions/during the build phase.At runtime, code-server runs as the
remoteUserand looks in~remoteUser/.local/share/code-server/extensions/, so the installed extensions are not visible.Reproduction
{ "remoteUser": "vscode", "features": { "ghcr.io/coder/devcontainer-features/code-server:1": { "extensions": "ms-python.python,dbaeumer.vscode-eslint" } } }Cause
In
install.sh, the extension installation runs as root without switching to$_REMOTE_USER:$_REMOTE_USERis available and used correctly in the entrypoint generation below, but not here.