¿Cómo monto un directorio de host como un volumen en Docker Compose?

Resuelto Amin Shah Gilani asked hace 7 años • 8 respuestas

Tengo un entorno de desarrollo que estoy acoplando y me gustaría poder recargar 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 nodeel archivo acoplable de mi aplicación 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
Amin Shah Gilani avatar Dec 01 '16 15:12 Amin Shah Gilani
Aceptado

Consulta su documentación

Por lo que parece, podrías hacer lo siguiente en tu docker-compose.yml

volumes:
    - ./:/app

¿Dónde ./está el directorio de host y /appel directorio de destino de los contenedores?


EDITAR:
La fuente de documentación anterior ahora conduce al historial de versiones, tendrás que seleccionar la versión de Compose que estás usando y buscar la referencia.

Para los perezosos – v3 / v2 / v1

Nota al margen: la sintaxis sigue siendo la misma para todas las versiones a partir de esta edición

jkris avatar Dec 01 '2016 08:12 jkris

Hay algunas opciones

Sintaxis corta

Usando el host : guestformato puedes hacer cualquiera de las siguientes cosas:

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 corta, como mount type(volume, bind 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.

GreensterRox avatar Jan 25 '2018 11:01 GreensterRox

Si desea montar un directorio de host en particular ( /disk1/prometheus-dataen el siguiente ejemplo) como un volumen en la volumessección del archivo YAML de Docker Compose, 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

Por cierto, en el Dockerfile de Prometheus, puede encontrar las VOLUMEinstrucciones que se muestran a continuación, que lo marcan como 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). :

archivo acoplable

...
VOLUME ["/prometheus"]
...

Árbitros:

  • https://docs.docker.com/compose/compose-file/compose-file-v3/#driver
  • https://docs.docker.com/compose/compose-file/compose-file-v3/#driver_opts
Yuci avatar May 02 '2019 12:05 Yuci