Posterior a de esta extensa recopilación de información dimos con la respuesta este atasco que tienen algunos de nuestros usuarios. Te ofrecemos la respuesta y nuestro deseo es que sea de mucha apoyo.
Solución:
Dos cambios que necesitas. En su servicio de nodo agregue el volumen como:
volumes:
- vnode:/usr/src/bundle_client
Ya que quieres compartir /usr/src/bundle_client
NO deberías estar usando /usr/src/
porque eso compartirá la carpeta completa y la estructura también.
Y luego, en su servicio nginx, agregue el volumen como:
volumes:
- type: volume
source: vnode
target: /var/www/test/static
volume:
nocopy: true
El nocopy: true
mantiene clara nuestra intención de que en el mapa inicial del contenedor no se debe copiar el contenido de la carpeta mapeada. Y, de forma predeterminada, el primer contenedor que se asigna al volumen obtendrá el contenido de la carpeta asignada. En tu caso quieres que este sea el node
envase.
Además, antes de realizar la prueba, asegúrese de ejecutar el siguiente comando para eliminar los volúmenes almacenados en caché:
docker-compose down -v
Puede ver durante mi prueba que el contenedor tenía los archivos:
Explicación de lo que sucede paso a paso
Dockerfile.node
...
COPY ./client /usr/src
...
docker-compose.yml
services:
...
node:
...
volumes:
- ./server/nginx.conf:/etc/nginx/nginx.conf:ro
- vnode:/usr/src
...
volumes:
vnode:
docker-compose up
crea con esta sección Dockerfile.node y docker-compose a volumen con nombre con datos guardados en /usr/src.
Dockerfile.nginx
FROM nginx:latest
COPY ./server/nginx.conf /etc/nginx/nginx.conf
RUN mkdir -p /var/www/tg/static
EXPOSE 80
EXPOSE 443
CMD ["nginx", "-g", "daemon off;"]
- Eso produce que los contenedores nginx creados con
docker-compose
tendrá un vacío/var/www/tg/static/
docker-compose.yml
...
nginx:
build:
context: .
dockerfile: ./Dockerfile.nginx
container_name: tg_nginx
restart: always
volumes:
- ./server/nginx.conf:/etc/nginx/nginx.conf:ro
- vnode:/var/www/tg/static
ports:
- "80:80"
- "443:443"
depends_on:
- node
- gunicorn
networks:
- nw_web_tg
volumes:
vdata:
vnode:
docker-compose up
producirá esovnode
se crea un volumen con nombre y se llena con datos de/var/www/tg/static
(vacío por ahora) a vnode existente.
Entonces, en este punto, el contenedor nginx tiene /var/www/tg/static vacío porque se creó vacío (ver mkdir en Dockerfile.nginx) – el contenedor del nodo tiene el directorio /usr/src con el archivo del cliente (vea que se copió en Dockerfile.node) – vnode tiene contenido de /usr/src de node
y /var/www/tg/static
de nginx.
En definitiva, para pasar datos de /usr/src desde tu
node
contenedor para/var/www/tg/static
ennginx
container necesita hacer algo que no es muy bonito porque Docker aún no ha desarrollado otra forma: necesita combinar volumen con nombre en la carpeta de origen con enlazar volumen en destino:nginx: build: context: . dockerfile: ./Dockerfile.nginx container_name: tg_nginx restart: always volumes: - ./server/nginx.conf:/etc/nginx/nginx.conf:ro - /var/lib/docker/volumes/vnode/_data:/var/www/tg/static ports: - "80:80" - "443:443" depends_on: - node - gunicorn networks: - nw_web_tg
Solo cambia en docker-compose - vnode:/var/www/tg/static
por - /var/lib/docker/volumes/vnode/_data:/var/www/tg/static
Sección de Reseñas y Valoraciones
Agradecemos que quieras añadir valor a nuestra información tributando tu veteranía en las críticas.