2016-10-24 12 views
2

Ich versuche, Container für react App zu konfigurieren. Mein Ziel ist es, docker-compose zu verwenden (ich möchte einen Befehl ausführen und alles funktioniert haben)docker kompose vs docker run - node container

Das Problem ist, dass, wenn ich versuche Sie es mit Docker-Compose und Docker-Datei (die unten sind) Ich bekomme Informationen, dass :

docker-compose.yml

version: '2' 
services: 
react: 
    build: ./images/react 
    ports: 
     - "3000:3000" 
    volumes: 
     - "/home/my/path:/app" 

Dockerfile

FROM node:6.9 

WORKDIR /app 

RUN npm install 

EXPOSE 3000 

CMD [ "npm", "start" ] 

Ergebnis

npm WARN ENOENT ENOENT: keine solche Datei oder das Verzeichnis, offen '/app/package.json'

Aber wenn ich tat es mit Docker Lauf und Volumen-Mapping I konnte packages.json sehen und npm install command ausführen.

docker run -it --rm -v /home/my/path:/app node:6.9 bash 

Warum funktioniert es nicht mit Docker komponieren?

Antwort

5

Beachten Sie, dass das Volumen, das Sie in Ihrer docker-compose.yml Datei beschreiben, wird bei Laufzeit, überhaupt nicht Kompilierzeit montiert werden. Dies bedeutet, dass beim Erstellen des Abbilds (noch) keine package.json Datei vorhanden ist, aus der Sie Ihre Abhängigkeiten installieren könnten.

Wenn run das Container-Image mit -v /home/my/path:/app nagt, wird das Verzeichnis zuerst gemountet und die nachfolgenden Aufrufe npm install werden erfolgreich abgeschlossen.

Wenn Sie Ihre Anwendung montieren (einschließlich package.json) in den Behälter, der npm install Bedarf zur Laufzeit geschehen (CMD), und nicht zum Zeitpunkt der Erstellung (RUN).

Der einfachste Weg, dies zu tun wäre, einfach die npm install Anweisung zu Ihrer CMD Anweisung hinzufügen (& Drop die RUN npm install Anweisung):

CMD npm install && npm start 
+0

Große Antwort danke! – Purzynski