2016-05-05 3 views
3

Ich versuche ein Dockerfile einzurichten, um mein Host-Verzeichnis in meinem angegebenen docker Container-Verzeichnis (so Code-Änderungen werden sofort reflektiert werden). Wenn ich docker run -p 3000:3000 -d -v ~/Projects/test:/app test ausführen, werden die Dateien bereitgestellt und alles funktioniert einwandfrei. Sobald ich jedoch den Container schließe, bleiben die Dateiänderungen nicht innerhalb des Containers wie die Änderungen, wenn ich volumes aus einer docker-compose Datei ausführen würde.Make Dockerfile VOLUME verhalten sich wie Docker-komponieren Volumes

Hier ist meine Dockerfile:

FROM node:onbuild 
EXPOSE 3000 
RUN mkdir /app 
VOLUME ./:/app/ 
WORKDIR /app/ 
RUN npm install -g nodemon 
CMD nodemon server.js 

Hier ist ein funktionierendes Docker-compose.yml:

test: 
    build: ./ 
    volumes: 
    - ./:/app/ 
    working_dir: /app/ 
    command: npm start 
    ports: 
    - "3000:3000" 

Antwort

4

Der VOLUME Befehl in Dockerfile eine etwas andere Bedeutung hat:

  1. Sie können nicht mounted Volumes in einem Docke definieren RDATEI
  2. es nur für die Angabe interContainerMengen verwendet

Also in Ihrem Dockerfile, VOLUME ./:/app/ muss VOLUME /app/ geändert werden. Ihre docker-compose Definition wird Docker zu lokalen Verzeichnis . zu /app im Container anhängen.


Die -v Option und der volumes Tag in docker-compose funktioniert auf die gleiche Art und Weise. Das Host-Verzeichnis wird in ein Containerverzeichnis eingebunden. Jede Datei, die in dem Bild im Containerverzeichnis vorhanden war, wird durch die Dateien aus dem Hostverzeichnis ersetzt.