Escenario:
- VSCode con las extensiones de Remote Development instaladas.
- Desarrollo en contenedores Docker.
- Imagen Docker con chrome instalado.
- Chrome no instalado en la máquina host.
- Queremos utilizar el chrome del contenedor Docker para depurar nuestras aplicaciones.
Guía paso a paso:
- Utilizar un Dockerfile basado en una imagen con chrome instalado (en mi caso, utilizo una imagen basada en Ubuntu 18.04 y personalizada para mis necesidades de desarrollo)
# Keep container running (for use in VSCode)
FROM rubensa/ubuntu-tini-dev-chrome
CMD [ «tail», «-f», «/dev/null» ] - En el fichero devcontainer.json añadir la extensión Debugger for Chrome y forzarla para se se ejecute en «workspace» (en vez de en «ui«)
{ ... "extensions": [ // Chrome debugger "msjsdiag.debugger-for-chrome" ], "settings": { "remote.extensionKind": { // Force chrome debugger extension installation on container "msjsdiag.debugger-for-chrome": [ "workspace" ] } }, ... }
NOTA: para que esto funciona, también es necesario instalar la extensión localmente (pero manteniéndola deshabilitada Locally y habilitada en Dev Container)
- Configurar los siguientes argumentos Docker dentro del fichero devcontainer.json
{ ... "runArgs": [ // X11 Unix-domain socket "--mount", "type=bind,source=/tmp/.X11-unix,target=/tmp/.X11-unix", "--env=DISPLAY=unix${localEnv:DISPLAY}", // Allow shared memory to avoid RAM access failures and rendering glitches due to X extesnion MIT-SHM "--ipc=host", // The kernel requires SYS_ADMIN for Chrome sand-box "--cap-add", "SYS_ADMIN", // $(id -u):$(id -g) "-u", "1000:1000" ], ... }
En mi Dockerfile particular debo especificar en devcontainer.json que VSCode no sobreescriba el comando por defecto de mi imagen.
{ ... "overrideCommand": false ... }
Ahora, al abrir tu proyecto en Remote – Containers, podrás depurar el código dentro del contenedor.