Compare commits

..

3 Commits

3 changed files with 47 additions and 3 deletions

View File

@@ -5,6 +5,17 @@ if [[ -z "${HOME_USER-}" ]]; then
HOME_USER="vscode"
fi
# Detectar UID/GID del volumen montado en /home/${HOME_USER} (si ya existe),
# permitir override explícito vía HOST_UID/HOST_GID, y por defecto usar 1000.
DETECTED_UID=$(stat -c '%u' "/home/${HOME_USER}" 2>/dev/null || echo 1000)
DETECTED_GID=$(stat -c '%g' "/home/${HOME_USER}" 2>/dev/null || echo 1000)
# Descartar UID/GID 0 (root) detectados del mount: es metadata espuria
# de bind mounts (p.ej. WSL2/Docker Desktop), no un UID/GID real de host.
[ "$DETECTED_UID" = "0" ] && DETECTED_UID=1000
[ "$DETECTED_GID" = "0" ] && DETECTED_GID=1000
TARGET_UID="${HOST_UID:-$DETECTED_UID}"
TARGET_GID="${HOST_GID:-$DETECTED_GID}"
if ! grep -q "HOME_USER=" /etc/environment; then
sudo bash -c "echo HOME_USER=$HOME_USER >> /etc/environment"
fi
@@ -48,6 +59,13 @@ sed 's/^USER_ENV_//' |
# Append the result to /usr/bin/.bashrc
while IFS= read -r line
do
# Ensure the user's home directory exists before writing .bashrc
if [ ! -d "/home/${HOME_USER}" ]; then
sudo mkdir -p "/home/${HOME_USER}"
sudo chown root:root "/home/${HOME_USER}"
sudo chmod 755 "/home/${HOME_USER}"
fi
# Check if the current user is root
if [ "$(id -u)" = "0" ]; then
echo "" >> /usr/bin/.bashrc
@@ -59,8 +77,9 @@ do
done
USER="$HOME_USER"
if ! id -u $HOME_USER > /dev/null 2>&1; then
sudo adduser --disabled-password --gecos "" --uid 1000 ${HOME_USER}
if ! id -u "$HOME_USER" > /dev/null 2>&1; then
sudo groupadd -g "${TARGET_GID}" "${HOME_USER}" 2>/dev/null || true
sudo adduser --disabled-password --gecos "" --uid "${TARGET_UID}" --gid "${TARGET_GID}" "${HOME_USER}"
sudo echo "$HOME_USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers.d/nopasswd > /dev/null
# Creating .vscode folder if it doesn't exist
@@ -70,6 +89,28 @@ if ! id -u $HOME_USER > /dev/null 2>&1; then
# Changing the property of the directory /home/${HOME_USER}/.vscode
sudo chown -R ${HOME_USER} /home/${HOME_USER}/.vscode
else
# Usuario ya existe (imagen/volumen reusado) — resincronizar UID/GID
# SOLO si el operador lo pidió explícitamente vía HOST_UID/HOST_GID.
# No usar la detección automática del mount acá: en reinicios repetidos
# es una señal poco confiable (ver metadata GID 0 de bind mounts en
# WSL2/Docker Desktop) y causaba un groupmod fallido en cada arranque.
if [[ -n "${HOST_UID-}" || -n "${HOST_GID-}" ]]; then
CURRENT_UID=$(id -u "${HOME_USER}")
CURRENT_GID=$(id -g "${HOME_USER}")
CURRENT_GROUP=$(id -gn "${HOME_USER}")
if [ "$CURRENT_UID" != "$TARGET_UID" ] || [ "$CURRENT_GID" != "$TARGET_GID" ]; then
if [ "$CURRENT_GID" != "$TARGET_GID" ]; then
sudo groupmod -g "${TARGET_GID}" "${CURRENT_GROUP}"
fi
if [ "$CURRENT_UID" != "$TARGET_UID" ]; then
sudo usermod -u "${TARGET_UID}" "${HOME_USER}"
fi
sudo find / -xdev \( -user "${CURRENT_UID}" -o -group "${CURRENT_GID}" \) \
-exec chown -h "${TARGET_UID}:${TARGET_GID}" {} + 2>/dev/null || true
fi
fi
fi
# Then execute entrypoint.sh

View File

@@ -16,6 +16,7 @@ The following environment variables can be set when running the Docker container
- `HOME_USER`: The username of the user running the container. This is used to set the correct permissions on files created in the container.
- `VSCODE_TUNNEL_NAME`: The name of the SSH tunnel used by Visual Studio Code to connect to the container.
- `HOST_UID` / `HOST_GID` (optional): Force the `HOME_USER` account to use a specific UID/GID instead of the default `1000`. This only applies the first time the user is created: if not set, the container will try to auto-detect the UID/GID from an existing `/home/${HOME_USER}` mount (useful when bind-mounting a host directory owned by a non-1000 user); if that can't be detected either (or the mount reports UID/GID `0`, which some bind mount setups do), it falls back to `1000`. If the container is restarted/reused and the user already exists, its UID/GID is only resynced (`usermod`/`groupmod`, with files re-owned accordingly) when `HOST_UID`/`HOST_GID` are explicitly set — auto-detection from the mount is not used to resync an existing user, since mount metadata can be unreliable across restarts.
### Custom Environment Variables
@@ -175,6 +176,8 @@ RUN echo 'source ~/.nvm/nvm.sh' >> ~/.bashrc
> **Note:** If you are using this image as a base image in a Dockerfile, ensure that the value of `HOME_USER` is the same as the one you will use when creating the container. This is necessary to ensure that all configurations and packages are installed in the correct user directory.
> **Note:** The `--uid 1000` in the example above is just illustrative. If you run the final container with `HOST_UID`/`HOST_GID` set (or with `/home/${HOME_USER}` bind-mounted from a host directory owned by another user), `entrypoint.sh` will resync this user's UID/GID at container start.
> **Note:** To grant access to the server, please log into https://github.com/login/device and use the code XXXX-XXXX. You can view the container logs to get the code.
## Contributing

View File

@@ -1 +1 @@
3.2.24
3.2.25