tag run hub delete docker docker-compose docker-volume

run - ¿Cómo monte un directorio de host como un volumen en Docker compose?



docker tag (4)

Tengo un entorno de desarrollo que estoy acoplando y me gustaría poder volver a cargar mis cambios en vivo sin tener que reconstruir las imágenes de acoplador. 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 el dockerfile de mi aplicación de nodo donde agrego un volumen, pero ¿cómo monto 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


Eran dos cosas:

docker-compose.yml el volumen en docker-compose.yml :

node: volumes: - ./node:/app

npm install && nodemon app.js las npm install && nodemon app.js a un CMD porque RUN agrega cosas al Sistema de archivos de la Unión, y mi volumen no es parte de UFS.

# 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"] # Define working directory WORKDIR /app # Expose port EXPOSE 8080 # Run npm install CMD npm install && nodemon app.js


Hay algunas opciones

Sintaxis Corta

Usando el host : guest formato de host : guest puede hacer lo siguiente:

volumes: # Just specify a path and let the Engine create a volume - /var/lib/mysql # Specify an absolute path mapping - /opt/data:/var/lib/mysql # Path on the host, relative to the Compose file - ./cache:/tmp/cache # User-relative path - ~/configs:/etc/configs/:ro # Named volume - datavolume:/var/lib/mysql

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 abreviada, como el mount type (volumen, enlace o tmpfs) y read_only .

version: "3.2" services: web: image: nginx:alpine ports: - "80:80" volumes: - type: volume source: mydata target: /data volume: nocopy: true - type: bind source: ./static target: /opt/app/static networks: webnet: volumes: mydata:

Consulte https://docs.docker.com/compose/compose-file/#long-syntax-3 para obtener más información.


Si desea montar un directorio de host particular ( /disk1/prometheus-data en el siguiente ejemplo) como un volumen en la sección de volumes del archivo Docker Compose YAML, puede hacerlo de la siguiente manera, por ejemplo:

version: ''3'' services: prometheus: image: prom/prometheus volumes: - prometheus-data:/prometheus volumes: prometheus-data: driver: local driver_opts: o: bind type: none device: /disk1/prometheus-data

Refs:


Verifique su documentation

Por lo que parece, puede hacer lo siguiente en su docker-compose.yml

volumes: - ./:/app