¿Cómo montar volúmenes con docker-compose dentro y fuera de un devcontainer VSCode?
Escenario
El proyecto en el que estoy trabajando (una aplicación React) usa docker-compose
para configurarlo es backend, servidor web y frontend. Estoy trabajando dentro de un VSCode devcontainer
(Nodo con tipografía).
El Docker en el entorno Docker Me parece que la configuración funciona bien y puedo empezar cada uno de los contenedores Docker pero tuve que adaptar el código de la siguiente manera porque de lo contrario Docker no pudo localizar los volúmenes especificados para montar.
Configuración
Primero necesitaba establecer un variable de entorno remoto en mi devcontainer.json
:
"remoteEnv": {
// the original host directory which is needed for volume mount commands from inside the container (Docker in Docker)
"LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}"
}
Estoy usando esta variable de entorno en el docker-compose.yaml
así:
services:
webserver:
build:
context: ./docker
dockerfile: webserver/Dockerfile
image: webserver
container_name: webserver_nginx
ports:
- 8080:80
volumes:
- ${LOCAL_WORKSPACE_FOLDER}/webserver:/etc/nginx/conf.d
- ${LOCAL_WORKSPACE_FOLDER}/build:/var/www/html
restart: unless-stopped
depends_on:
- backend
backend:
...
Problema
En mi máquina (y en la máquina de mis colegas que también utilizan VSCode) todo funciona bien. Pero tengo algunos equipos que no usan VSCode. Cuando comprobé la adaptación docker-compose.yaml
archivo, su configuración ya no funciona y viceversa si adaptan el archivo de nuevo a sus necesidades.
Pregunta
¿Cómo puedo asegurarme de que Docker compose funciona dentro y fuera de VSCode devcontainers
?
¿ Posibles soluciones?
¿Sería posible establecer la variable ambiente a un valor predeterminado? Porque en mi caso el valor real que debe establecerse si el proyecto no se abre dentro de un
devcontainer
es sólo un punto simple (.
). Porque cuando ejecuto el comandoecho ${LOCAL_WORKSPACE_FOLDER}
dentro de la terminal VSCode integrada, la ruta correcta se imprime. Así que parece que VSCode sólo establece variables ambientales normales?(Si la suposición de arriba es correcta) no sería posible escribir un sencillo script Bash
install.sh
¿Ese set es el camino correcto automáticamente? Este script sólo debe ejecutarse una vez durante la configuración del proyecto. ¿Cómo puede parecer este archivo?
Pregunta hecha hace 3 años, 4 meses, 29 días - Por algorithmarchitect
3 Respuestas:
-
Docker compose permite valor predeterminado para variables:
${VARIABLE:-default} evalúa por defecto si VARIABLE es inestable o vacío en el medio ambiente.
Véase: https://docs.docker.com/compose/environment-variables/
Para usted ejemplo de caso, puede utilizar:
¿Por qué?
PS: Nunca usé esa persona
Respondida el Dec 17, 2020 a las 15:30 - por pixelpioneerc4b5
Votos positivos: 0 | Votos negativos: 0 -
Para asegurarte de que tu configuración de Docker Compose funcione tanto dentro como fuera de los contenedores de desarrollo de VSCode, puedes seguir algunas recomendaciones:
- Establecer la variable de entorno a un valor predeterminado:
LOCAL_WORKSPACE_FOLDER
en tudevcontainer.json
con un valor predeterminado en caso de que no se esté ejecutando dentro de un contenedor de desarrollo de VSCode. Por ejemplo, podrías establecerlo en.
cuando esté fuera de VSCode, y usar el valor real cuando esté dentro de VSCode. De esta forma, tu archivodocker-compose.yaml
seguirá funcionando en ambos escenarios.- Crear un script
install.sh
para configurar el entorno:
install.sh
que establezca la variable de entornoLOCAL_WORKSPACE_FOLDER
al valor correspondiente dependiendo de si se está ejecutando dentro de un contenedor de desarrollo de VSCode o no. Este script podría detectar automáticamente si se encuentra dentro de un contenedor y ajustar la variable en consecuencia.Aquí tienes un ejemplo simple de cómo podría ser el script
install.sh
:bash
!/bin/bash Check if running inside a devcontainer
if [ -f /.devcontainer ]; then export LOCAL_WORKSPACE_FOLDER="${localWorkspaceFolder}" else export LOCAL_WORKSPACE_FOLDER="." fiOptionally print the value of LOCAL_WORKSPACE_FOLDER for verification
echo "LOCAL_WORKSPACE_FOLDER: $LOCAL_WORKSPACE_FOLDER"You may run your docker-compose commands or any other setup steps here
Este script puede ejecutarse una vez durante la configuración del proyecto para asegurarse de que la variable de entorno esté correctamente configurada.
Recuerda que también puedes evaluar otras opciones o variaciones de este enfoque dependiendo de tus necesidades específicas y la complejidad de tu proyecto.
Respondida el Dec 18, 2020 a las 15:31 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Solución 1: Establecer la variable de entorno a un valor predeterminado
Sí, es posible establecer la variable de entorno a un valor predeterminado. Puedes utilizar el siguiente código en tu
docker-compose.yaml
:yaml services: webserver: ... environment: LOCAL_WORKSPACE_FOLDER: ${LOCAL_WORKSPACE_FOLDER:-.} ...
Esto establecerá la variable
LOCAL_WORKSPACE_FOLDER
a su valor actual si se establece, y a "." si no lo está.Solución 2: Crear un script de instalación
También puedes crear un script de instalación que establezca la variable de entorno correctamente. Aquí tienes un ejemplo de archivo
install.sh
:bash
!/bin/bash Comprueba si la variable LOCAL_WORKSPACE_FOLDER está establecida
if [ -z "${LOCAL_WORKSPACE_FOLDER}" ]; thenSi no está establecida, intenta obtenerla del entorno de VSCode
export LOCAL_WORKSPACE_FOLDER=$(code --list-extensions | grep remote.containers | awk '{print $NF}' | sed 's/}//g') fiSi la variable sigue sin estar establecida, establece un valor predeterminado
if [ -z "${LOCAL_WORKSPACE_FOLDER}" ]; then export LOCAL_WORKSPACE_FOLDER=. fiPuedes ejecutar este script durante la configuración del proyecto. Por ejemplo, puedes agregarlo a tu
package.json
y ejecutarlo con el siguiente comando:npm run setup
Consideraciones adicionales:
Si estás usando un editor diferente a VSCode, es posible que necesites adaptar el comando para obtener la ruta del espacio de trabajo. Es posible que también necesites ajustar los volúmenes montados en tu
docker-compose.yaml
para que coincidan con la ruta correcta.Respondida el Dec 18, 2020 a las 15:37 - por Gemini
Votos positivos: 0 | Votos negativos: 0