Tengo un entorno de desarrollo que estoy acoplando y me gustaría tener la capacidad de recargar en vivo mis cambios sin tener que reconstruir las imágenes de la ventana acoplable. Estoy usando docker compose porque redis es una de las dependencias de mi aplicación y me gusta poder vincular un contenedor de redis
Tengo dos contenedores definidos en mi docker-compose.yml
:
node:
build: ./node
links:
- redis
ports:
- "8080"
env_file:
- node-app.env
redis:
image: redis
ports:
- "6379"
Llegué al punto en node
el dockerfile de mi aplicación en el que agrego un volumen, pero ¿cómo puedo montar el directorio del host en el volumen para que todas mis ediciones en vivo del código se reflejen en el contenedor?
Aquí está mi Dockerfile actual:
# Set the base image to Ubuntu
FROM node:boron
# File Author / Maintainer
MAINTAINER Amin Shah Gilani <[email protected]>
# Install nodemon
RUN npm install -g nodemon
# Add a /app volume
VOLUME ["/app"]
# TODO: link the current . to /app
# Define working directory
WORKDIR /app
# Run npm install
RUN npm install
# Expose port
EXPOSE 8080
# Run app using nodemon
CMD ["nodemon", "/app/app.js"]
Mi proyecto se ve así:
/
- docker-compose.yml
- node-app.env
- node/
- app.js
- Dockerfile.js
docker
docker-compose
docker-volume
Amin Shah Gilani
fuente
fuente
Error: Cannot find module '/data/app.js'
/app/
por qué tu CMD apunta a/data
Error: Cannot find module 'express'
. Voy a intentar algunas cosas ahora.- .:c:/app
(esto me hizo tropezar)Hay algunas opciones
Sintaxis corta
Con el
host : guest
formato, puede realizar cualquiera de las siguientes acciones:Sintaxis larga
A partir de docker-compose v3.2, puede usar una sintaxis larga que permite la configuración de campos adicionales que se pueden expresar en forma corta, como
mount type
(volumen, vinculación o tmpfs) yread_only
.Consulte https://docs.docker.com/compose/compose-file/#long-syntax-3 para obtener más información.
fuente
Si desea montar un directorio de host en particular (
/disk1/prometheus-data
en el siguiente ejemplo) como un volumen en lavolumes
sección del archivo YAML de Docker Compose, puede hacerlo de la siguiente manera, por ejemplo:Por cierto, en el Dockerfile de prometheus, puede encontrar la
VOLUME
instrucción como se muestra a continuación, que lo marca como que contiene volúmenes montados externamente desde el host nativo, etc. (Sin embargo, tenga en cuenta: esta instrucción no es obligatoria para montar un volumen en un contenedor). :Dockerfile
Refs:
fuente
local
tipo de controlador?local
driver_opts: o: bind type: none
?local
controlador integrado en Linux acepta opciones similares al comando de montaje de linux: man7.org/linux/man-pages/man8/mount.8.html . Puede encontrar más discusiones en github.com/moby/moby/issues/19990#issuecomment-248955005 , y stackoverflow.com/questions/35841241/…Fueron dos cosas:
Agregué el volumen en
docker-compose.yml
:Moví las
npm install && nodemon app.js
piezas a unCMD
porqueRUN
agrega cosas al sistema de archivos de la Unión, y mi volumen no es parte de UFS.fuente
tenemos que crear su propio volumen de docker mapeado con el directorio de host antes de mencionar en el docker-compose.yml como externo
1.Crear volumen denominado recurso compartido
2.Úselo en su docker-compose
De esta manera podemos compartir el mismo directorio con muchos servicios que se ejecutan en diferentes contenedores.
fuente