J'ai un environnement de développement que je suis en train de docker et j'aimerais pouvoir charger mes modifications sans avoir à reconstruire les images docker. J'utilise docker compose car redis est l'une des dépendances de mon application et j'aime pouvoir lier un conteneur redis
J'ai deux conteneurs définis dans mon docker-compose.yml
:
node:
build: ./node
links:
- redis
ports:
- "8080"
env_file:
- node-app.env
redis:
image: redis
ports:
- "6379"
Je suis arrivé au point dans node
le fichier docker de mon application où j'ajoute un volume, mais comment monter le répertoire de l'hôte dans le volume afin que toutes mes modifications en direct du code soient reflétées dans le conteneur?
Voici mon Dockerfile actuel:
# 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"]
Mon projet ressemble à ceci:
/
- docker-compose.yml
- node-app.env
- node/
- app.js
- Dockerfile.js
la source
Error: Cannot find module '/data/app.js'
/app/
pourquoi votre CMD pointe vers/data
Error: Cannot find module 'express'
je vais essayer quelques trucs maintenant.- .:c:/app
(cela m'a fait trébucher)Il y a quelques options
Syntaxe courte
En utilisant le
host : guest
format, vous pouvez effectuer l'une des opérations suivantes:Syntaxe longue
À partir de docker-compose v3.2, vous pouvez utiliser une syntaxe longue qui permet la configuration de champs supplémentaires qui peuvent être exprimés sous forme abrégée tels que
mount type
(volume, bind ou tmpfs) etread_only
.Consultez https://docs.docker.com/compose/compose-file/#long-syntax-3 pour plus d'informations.
la source
Si vous souhaitez monter un répertoire hôte particulier (
/disk1/prometheus-data
dans l'exemple suivant) en tant que volume dans lavolumes
section du fichier Docker Compose YAML, vous pouvez le faire comme ci-dessous, par exemple:À propos, dans Dockerfile de prometheus, vous pouvez trouver l'
VOLUME
instruction ci-dessous, qui la marque comme contenant des volumes montés en externe à partir de l'hôte natif, etc. (Remarque cependant: cette instruction n'est pas indispensable pour monter un volume dans un conteneur.) :Dockerfile
Réf:
la source
local
type de pilote?local
driver_opts: o: bind type: none
?local
pilote intégré sous Linux accepte des options similaires à la commande de montage linux: man7.org/linux/man-pages/man8/mount.8.html . Vous pouvez trouver plus de discussion sur github.com/moby/moby/issues/19990#issuecomment-248955005 , et stackoverflow.com/questions/35841241/...C'était deux choses:
J'ai ajouté le volume dans
docker-compose.yml
:J'ai déplacé les
npm install && nodemon app.js
morceaux dans unCMD
carRUN
ajoute des éléments au système de fichiers Union, et mon volume ne fait pas partie d'UFS.la source
nous devons créer votre propre volume docker mappé avec le répertoire hôte avant de mentionner dans le docker-compose.yml comme externe
1.Créer un volume nommé partage
2. utilisez-le dans votre docker-compose
De cette façon, nous pouvons partager le même répertoire avec de nombreux services s'exécutant dans différents conteneurs
la source