Files
qwen3-6-lora/data/raw/sanitized/plans/tengoneste-error-y-creo-zazzy-hamming.md
T

3.6 KiB

Plan: Dockerfile user-agnostic con sudo

Context

El Dockerfile hardcodea el usuario aleleba y no crea la imagen para múltiples usuarios. Cuando se ejecuta con HOME_USER=aleleba-telus, el entrypoint.sh intenta sourcear /home/aleleba-telus/.bashrc que no existe → "Permission denied".

Objetivo: Instalar todo como root en paths globales. Cualquier HOME_USER funciona — el entrypoint crea el usuario, le da sudo, y copia la configuración.

Cambios (solo 3)

1. Eliminar creación hardcoded de usuario (líneas 7-11)

Eliminar estas líneas del Dockerfile:

RUN sudo adduser --disabled-password --gecos "" --uid 1000 ${HOME_USER}
RUN sudo echo "$HOME_USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers.d/nopasswd > /dev/null
USER ${HOME_USER}
WORKDIR /home/${HOME_USER}

El entrypoint.sh ya hace todo esto al runtime:

  • Crea el usuario si no existe (línea 56)
  • Le da sudo (línea 58)
  • Copia /usr/bin/.bashrc al home del usuario (línea 99)

2. Mover .bashrc a global (líneas 172-179)

Cambiar todos los ~/.bashrc a /usr/bin/.bashrc:

# Antes
RUN echo "PATH=..." | sudo tee -a ~/.bashrc
RUN echo "export JAVA_HOME=..." | sudo tee -a ~/.bashrc
RUN echo "export ANDROID_HOME=..." | sudo tee -a ~/.bashrc
RUN echo "export ANDROID_SDK_ROOT=..." | sudo tee -a ~/.bashrc
RUN echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"' | sudo tee -a ~/.bashrc
RUN echo "export EMSDK_QUIET=1" | sudo tee -a ~/.bashrc
RUN echo "source /emsdk/emsdk_env.sh" | sudo tee -a ~/.bashrc
RUN echo 'export PATH="$HOME/.local/bin:$PATH"' | sudo tee -a ~/.bashrc

# Después — todo a /usr/bin/.bashrc
RUN echo "PATH=..." | sudo tee -a /usr/bin/.bashrc
RUN echo "export JAVA_HOME=..." | sudo tee -a /usr/bin/.bashrc
RUN echo "export ANDROID_HOME=..." | sudo tee -a /usr/bin/.bashrc
RUN echo "export ANDROID_SDK_ROOT=..." | sudo tee -a /usr/bin/.bashrc
RUN echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"' | sudo tee -a /usr/bin/.bashrc
RUN echo "export EMSDK_QUIET=1" | sudo tee -a /usr/bin/.bashrc
RUN echo "source /emsdk/emsdk_env.sh" | sudo tee -a /usr/bin/.bashrc
RUN echo 'export PATH="$HOME/.local/bin:$PATH"' | sudo tee -a /usr/bin/.bashrc

El entrypoint.sh ya se encarga de copiar /usr/bin/.bashrc a cada home.

3. Limpiar redundancias (líneas 155-159)

Eliminar comentarios de "already installed" — no aportan valor.

Todas las herramientas siguen disponibles

Nada cambia en las instalaciones — todo está en paths globales:

Herramienta Dónde
code /usr/bin/code (base image)
docker /usr/bin/docker
docker-compose /usr/local/bin/docker-compose
gh /usr/bin/gh
node/npm/nvm /usr/local/bin/ + /root/.nvm
python3/pip /usr/bin/python3
pandas/numpy/etc pip install global
kubectl /usr/bin/kubectl
flux /usr/bin/flux
conan pip install global
emsdk /emsdk
android-sdk /opt/android-sdk
claude /usr/local/bin/claude

Los binarios están en /usr/bin y /usr/local/bin — paths que cualquier usuario puede usar. Solo cambia que ya no está restringido al usuario aleleba.

Verificación

  1. docker build — sin errores
  2. docker run -e HOME_USER=aleleba — funciona (mismo usuario)
  3. docker run -e HOME_USER=aleleba-telus — funciona (nuevo usuario, sin permission denied)
  4. Dos contenedores con diferente HOME_USER coexisten
  5. Cada usuario tiene sudo: sudo apt-get update funciona
  6. Todos los binarios accesibles: code, docker, node, python3, adb, emcc, claude, gh, kubectl