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/.bashrcal 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
docker build— sin erroresdocker run -e HOME_USER=aleleba— funciona (mismo usuario)docker run -e HOME_USER=aleleba-telus— funciona (nuevo usuario, sin permission denied)- Dos contenedores con diferente
HOME_USERcoexisten - Cada usuario tiene sudo:
sudo apt-get updatefunciona - Todos los binarios accesibles:
code,docker,node,python3,adb,emcc,claude,gh,kubectl