2017-06-08 6 views
0

Ich benutze Docker komponieren und ich habe ein Volume erstellt. Ich habe mehrere Container. Ich habe Probleme, Befehle im Andock-Container auszuführen. Ich habe Knoten js Container, die separate Front-End-und Back-End-Ordner haben. Ich muss npm installieren in beiden Ordnern ausführen.Zugriffsvolumen in Docker Build

version: '2' 

services: 

### Applications Code Container ############################# 

    applications: 
     image: tianon/true 
     volumes: 
     - ${APPLICATION}:/var/www/html 


    node: 
     build: 
     context: ./node 
     volumes_from: 
     - applications 
     ports: 
     - "4000:30001" 
     networks: 
     - frontend 
     - backend  

Das ist meine Docker-Datei für den Knoten

FROM node:6.10 

MAINTAINER JC Gil <[email protected]> 

ENV TERM=xterm 

ADD script.sh /tmp/ 
RUN chmod 777 /tmp/script.sh 

RUN apt-get update && apt-get install -y netcat-openbsd 

WORKDIR /var/www/html/Backend 

RUN npm install 

EXPOSE 4000 
CMD ["/bin/bash", "/tmp/script.sh"] 

mein workdir ist leer als Standort/var/www/html/Backend ist nicht verfügbar, während Gebäude aber zur Verfügung, wenn i conainter oben ist. Also mein Befehl npm installieren funktioniert nicht

Antwort

0

Was gibt es zu ADD oder COPY die an die richtige Stelle, RUN npm installpackage.json Datei ist, möchten Sie wahrscheinlich wissen hinzufügen dann ADD oder COPY der Rest der Quelle in das Bild. Auf diese Weise wird docker buildnpm install nur bei Bedarf erneut ausgeführt.

Es wäre wahrscheinlich besser, Frontend und Backend in getrennten Behältern zu laufen, aber wenn das nicht eine Option ist, ist es durchaus möglich ADD package.json läuft - für jede Anwendung ADD . einmal - RUN npm install.

0

Der RUN ist ein Image-Build-Schritt, zur Build-Zeit ist das Volumen noch nicht angeschlossen. Ich denke, Sie müssen npm installieren in CMD ausführen.

können Sie versuchen, npm install innerhalb /tmp/script.sh

Lassen Sie mich

+0

Fertig, ich habe Frontend, banckend und einen anderen Ordner. Also gibt es npm installieren in allen Ordner und in Frontend Bower installieren. Es braucht jedes Mal eine Menge Zeit für den Container. – Sandhu

0

Als Tomas Lycken Erwähnt, Dateien zu kopieren und dann npm installieren. Ich habe Container für Frontend und Backend getrennt. Am wichtigsten sind die Knotenmodule für das Frontend und Backend. Sie müssen diese als Volumes in Services erstellen, damit sie verfügbar sind, wenn wir den Container hochfahren.

version: '2' 

services: 

### Applications Code Container ############################# 

    applications: 
     image: tianon/true 
     volumes: 
     - ${APPLICATION}:/var/www/html 
     - ${BACKEND}:/var/www/html/Backend 
     - ${FRONTEND}:/var/www/html/Frontend 


    apache: 
     build: 
     context: ./apache2 
     volumes_from: 
     - applications 
     volumes: 
     - ${APACHE_HOST_LOG_PATH}:/var/log/apache2 
     - ./apache2/sites:/etc/apache2/sites-available   
     - /var/www/html/Frontend/node_modules 
     - /var/www/html/Frontend/bower_components 
     - /var/www/html/Frontend/dist 
     ports: 
     - "${APACHE_HOST_HTTP_PORT}:80" 
     - "${APACHE_HOST_HTTPS_PORT}:443" 
     networks: 
     - frontend 
     - backend 

    node: 
     build: 
     context: ./node 
     ports: 
     - "4000:4000" 
     volumes_from: 
     - applications 
     volumes:   
     - /var/www/html/Backend/node_modules 
     networks: 
     - frontend 
     - backend