Ich habe eine Entwicklungsumgebung, die ich dockerisiere, und ich möchte die Möglichkeit haben, meine Änderungen zu laden, ohne Docker-Images neu erstellen zu müssen. Ich verwende Docker Compose, weil Redis eine der Abhängigkeiten meiner App ist und ich es mag, einen Redis-Container verknüpfen zu können
Ich habe zwei Container in meinem definiert docker-compose.yml
:
node:
build: ./node
links:
- redis
ports:
- "8080"
env_file:
- node-app.env
redis:
image: redis
ports:
- "6379"
Ich habe den Punkt in node
der Docker-Datei meiner App erreicht, an dem ich ein Volume hinzufüge. Wie kann ich jedoch das Host-Verzeichnis in das Volume einbinden, damit alle meine Live-Änderungen am Code im Container angezeigt werden?
Hier ist meine aktuelle Docker-Datei:
# 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"]
Mein Projekt sieht so aus:
/
- docker-compose.yml
- node-app.env
- node/
- app.js
- Dockerfile.js
quelle
Error: Cannot find module '/data/app.js'
/app/
warum dein CMD auf/data
Error: Cannot find module 'express'
ich ein paar Dinge ausprobieren.- .:c:/app
Es gibt einige Optionen
Kurze Syntax
Mit dem
host : guest
Format können Sie eine der folgenden Aktionen ausführen:Lange Syntax
Ab Docker-Compose v3.2 können Sie eine lange Syntax verwenden, mit der zusätzliche Felder konfiguriert werden können, die in Kurzform ausgedrückt werden können, z. B.
mount type
(volume, bind oder tmpfs) undread_only
.Weitere Informationen finden Sie unter https://docs.docker.com/compose/compose-file/#long-syntax-3 .
quelle
Wenn Sie ein bestimmtes Hostverzeichnis (
/disk1/prometheus-data
im folgenden Beispiel) als Volume imvolumes
Abschnitt der Docker Compose YAML-Datei bereitstellen möchten, können Sie dies wie folgt tun, z.Übrigens finden Sie in der Docker-Datei von prometheus die folgende
VOLUME
Anweisung, die das Speichern von extern gemounteten Volumes vom nativen Host usw. kennzeichnet. (Beachten Sie jedoch, dass diese Anweisung kein Muss ist, um ein Volume in einen Container zu mounten.) ::Dockerfile
Refs:
quelle
local
Fahrertyp?local
driver_opts: o: bind type: none
?local
Linux integrierte Treiber akzeptiert Optionen, die dem Linux-Mount-Befehl ähnlich sind: man7.org/linux/man-pages/man8/mount.8.html . Weitere Informationen finden Sie unter github.com/moby/moby/issues/19990#issuecomment-248955005 und stackoverflow.com/questions/35841241/…Es waren zwei Dinge:
Ich habe das Volume hinzugefügt in
docker-compose.yml
:Ich habe die
npm install && nodemon app.js
Teile in ein verschoben,CMD
weilRUN
dem Union-Dateisystem Dinge hinzugefügt wurden und mein Volume nicht Teil von UFS ist.quelle
Wir müssen Ihr eigenes Docker-Volume erstellen, das dem Host-Verzeichnis zugeordnet ist, bevor wir es in der docker-compose.yml als extern erwähnen
1.Erstellen Sie das Volume mit dem Namen share
2.Verwenden Sie es in Ihrem Docker-Compose
Auf diese Weise können wir dasselbe Verzeichnis mit vielen Diensten teilen, die in verschiedenen Containern ausgeführt werden
quelle