wake-up-neo.com

Docker: Lädt eine nodejs-App mit nodemon neu

Ich habe eine Hallo, Welt Express-App, die ich mit nodemon ausführe, damit der Server bei jeder Änderung einer Datei neu gestartet wird.

Ich verpacke die App als Docker-Image.

Dockerfile :

FROM node:6.3.0

RUN mkdir -p /opt/app
WORKDIR /opt/app

COPY . /opt/app

RUN npm install

EXPOSE 3000

CMD ["npm", "start"]

npm start führt nodemon -L index.js wie in package.json definiert aus

Ich kann das Image jedoch nicht jedes Mal erstellen, wenn ich eine Änderung an meiner App vornehme. Ich habe auch eine docker-compose.yml -Datei, in der ich die Option build spezifiziere, aber ich kann den Container immer noch nicht zum Neuladen bekommen

version: "2"
services:
  rpro:
    build: .
    command: npm start
    ports:
      - "3000:3000"
    volumes:
      - /opt/app

Hier das gesamte Repo


Wie erreiche ich einen Neustart des Servers bei Dateiänderungen mit Docker-Containern? Was ist in einem solchen Fall der übliche Entwicklungs-Workflow?

7
Jatin

Ah, das Problem scheint bei docker-compose.yml volumes param zu liegen. Ändern Sie es auf

volumes:
  - .:/opt/app

bringt es zum laufen. Er weist Docker an, den Anwendungsordner . auf dem Host in den /opt/app im Container einzuhängen.

Nachdem Sie docker-compose up ausgeführt haben, wird der Server bei Dateiänderungen neu gestartet.

15
Jatin

Ich bin mir nicht sicher, ob ich das als Problem bezeichnen würde, da dies der übliche Workflow ist. Wenn sich eine Datei ändert, die sich im Container befindet, wird eine Neuerstellung ausgelöst. Wenn Sie die Datei nicht in den Container stellen, wird dies nicht durchgeführt. Wenn @jatin dies erwähnt, können Sie Ihr Compose-Verzeichnis über - .:/opt/app oder ähnliches verknüpfen.

Wenn Sie dies tun, müssen Sie in Ihrem Build COPY . /opt/app nicht verwenden, da er über dieses Verzeichnis geladen wird.

Beachten Sie, wenn Sie docker-compose up --build Docker nicht neu erstellen (den Server neu starten), wenn sich die Dateien auf dem bereitgestellten Volume ändern, sondern nur, wenn sich die Dateien auf dem erstellten Volume ändern. Da Sie die Dateien anscheinend über nodemon überwachen, wird may neu gestartet (da Sie die Legacy-Überwachung verwenden, sollte dies nur beachtet werden, dass es Fälle gibt, in denen die Dateiänderung möglicherweise nicht erkannt wird).

Grundsätzlich ist dies für die Entwicklung in Ordnung. In der Produktion möchten Sie jedoch watch nicht verwenden, und Sie würden Docker höchstwahrscheinlich verwenden, um den Container zu überwachen und neu zu starten, wenn er beendet wird (restart: always) oder einen Prozessmanager im Nicht-Daemon-Modus verwenden.

1
ldg