2017-04-07 2 views
0

Das ist mein Dockerfile ist:npm installieren nicht in Docker funktioniert

FROM node:7 

RUN apt-get update && apt-get install -y --no-install-recommends \ 
    rubygems build-essential ruby-dev \ 
    && rm -rf /var/lib/apt/lists/* 

RUN npm install -gq gulp bower 

RUN mkdir -p /usr/src/app 
WORKDIR /usr/src/app 
COPY . /usr/src/app 

RUN npm install 

CMD ["gulp", "start:dev"] 

Wenn ich das Bild aufbauen, installieren Sie die npm Befehl ausführt mit wenig Leistung und wirklich schnell. Ich baue es tatsächlich über docker-compose, das ein Volume angehängt hat - und ich kann den Ordner node_modules, der auf meinem Schlauch erstellt wird, nicht sehen. Wenn ich einen Container auf diesem Image starte, kann ich sehen, dass es keinen Ordner node_modules gibt. Ich führe dann npm install aus und die Dinge beginnen zu arbeiten - es dauert 2-3 Minuten, um alle Pakete zu installieren und der Ordner node_modules ist tatsächlich erstellt.

Was passiert hier? Was mache ich falsch? Warum installiert npm nicht zur Laufzeit, funktioniert aber zur Laufzeit?

+1

Sie erwähnen ein Volume, das jedoch in den darin enthaltenen Befehlen oder Dateien nicht angezeigt wird. Bitte schließen Sie Ihre docker-compose.yml und die Ausgabe mit dem Fehler ein. – BMitch

Antwort

0

Die npm install sollte basierend auf Ihrem Dockerfile funktioniert haben. Sie können die erstellten Dateien sehen, wenn Sie das Bild ohne montiertem Volume ausführen (DIRNAME: wo Ihr docker-compose.yml befindet):

docker run --rm -it DIRNAME_node ls -ahl /usr/src/app

Mit docker build, alle Daten im Bild gespeichert ist. Es ist also beabsichtigt, dass auf Ihrem Host keine Dateien angezeigt werden.

Wenn Sie ein Volume mounten (normalerweise unter Linux, auch in einem Docker-Container), lautet es overlays the directory. Sie können also die im Build-Schritt erstellte node_modules nicht sehen.

Ich schlage vor, dass Sie Ihre Tests basierend auf dem Docker-Image selbst durchführen und das Volume nicht mounten. Dann haben Sie eine immutable Docker image, die für die Bereitstellung besser ist.

Verwandte Themen