2017-03-22 4 views
1

Ich habe einen sehr einfachen Code-Basis wie folgtWie Host-Codes in Docker Container anhängen?

Dockerfile 
docker-compose.yml 
package.json 
server.js 

Meine Docker Datei

FROM node:alpine 

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

COPY package.json /usr/src/app 
RUN npm install 

COPY . /usr/src/app 

EXPOSE 3000 
CMD ["npm", "start"] 

Meine Docker compose Datei

version: "3" 
services: 
    web: 
    build: . 
    volumes: 
     - .:/usr/src/app 
     - /usr/src/app/node_modules 
    ports: 
     - "3000:3000" 
    depends_on: 
     - postgres 
    postgres: 
    image: postgres:9.6-alpine 
    ports: 
     - 5432:5432 

Ich kann docker-compose up erfolgreich aufzubauen und zu tun, aber ich habe Problem mounten Sie meinen Quellcode an den Container (dh wenn ich meine server.js bearbeite und den Browser aktualisiere, ändert es sich nicht).

Ich bin mir nicht sicher, welche Teile fehlen. Kann mir bitte jemand dabei helfen? Danke vielmals!

Aktualisieren: Wenn ich den Container inspiziere, hier ist die Mount-Info.

"Mounts": [ 
      { 
       "Type": "bind", 
       "Source": "/Users/JJ/myApp", 
       "Destination": "/usr/src/app", 
       "Mode": "rw", 
       "RW": true, 
       "Propagation": "" 
      }, 
      { 
       "Type": "volume", 
       "Name": "12e5a018e711511bfe14a8ea97465d7966696dc62a57727eeafd0de2b4a1e915", 
       "Source": "/var/lib/docker/volumes/12e5a018e711511bfe14a8ea97465d7966696dc62a57727eeafd0de2b4a1e915/_data", 
       "Destination": "/usr/src/app/node_modules", 
       "Driver": "local", 
       "Mode": "", 
       "RW": true, 
       "Propagation": "" 
      } 
     ] 
+1

Warum denken Sie, dass "source" und "destination" ausgeschaltet sind? Der erste lädt ein Host-Verzeichnis, der zweite nicht. Also die sehen gut aus für mich. Können Sie 'docker-compose run web sh' ausführen und prüfen, ob die Änderungen' code 'server.js' sich im Container-Dateisystem widerspiegeln? Es sollte sein. – tayfun

+0

Ich kann die Datei Änderungen in/usr/src/app sehen, aber ich bin mir nicht sicher, warum es nicht beim Aktualisieren des Browsers widerspiegelt. +1 – Jwqq

+1

Das bedeutet, dass Ihre Mounts korrekt funktionieren. Ihre Knotenanwendung, die mit 'npm start' ausgeführt wird, lädt Codeänderungen nicht neu. Ich bin mir nicht sicher, wie Sie das tun würden, wahrscheinlich npm Server-Konfiguration, die Codeänderung automatisch neu lädt. – tayfun

Antwort

2

Ihr Code wird nicht automatisch neu geladen, wenn Sie ihn ändern. Sie müssen den Prozess neu starten, damit dies geschieht.

Ich empfehle, Nodemon in Ihrer Entwicklungsumgebung zu verwenden, damit dies automatisch geschieht. https://nodemon.io/

Stellen Sie sicher, dass Sie nodemon nicht zur Produktion bereitstellen. Das ist nicht dafür gedacht. Es ist ein Entwicklungswerkzeug.