2015-02-23 19 views
8

Ich habe also wahrscheinlich, wie die meisten Leute, einen App-Code, der über ein separates Volume in einen Docker-Container eingebunden ist.In Docker VM scheint Gulp-Watch auf Volumes, die vom Host-Betriebssystem gehostet werden, nicht gut zu funktionieren

Das Problem ist, dass, wenn ich schlucke, und insbesondere Schluck-Watch, um Dateiänderungen usw. in Docker, auf dem App-Code im Docker-Container montiert, richtig zu bauen und neu starten Knoten im Andock-Container als notwendig, scheint es CPU-intensiv zu werden (wie beim Abfragen von Dateiänderungen, anstatt auf Dateiänderungsereignisse zu warten) bis zu dem Punkt, an dem meine Maschine schnellt.

Ich denke, das liegt daran, dass das Dateisystem vom nativen Host auf den Docker-Container geladen wurde, aber wie geht das? Machen sie ihre ganze Arbeit im Container? Native Host dann ständig bauen? Oder fehlt mir etwas, bei dem mein Setup bei gulp-watch/nodemon falsch ist?

+0

Es scheint damit verwandt, wenn Leute irgendwelche Eingabe haben, https://github.com/paulmillr/chokidar/issues/212 – adrian

+0

Näher verwandt mit https://github.com/paulmillr/chokidar/issues/242 , die zum Zeitpunkt des Schreibens aktiv war und einer Lösung nahe kam. Problemumgehung: Führen Sie gulp watch nur lokal aus und lassen Sie Ihren Docker-Container die statischen Dateien bereitstellen. Wenn Sie auf Liveload angewiesen sind, haben Sie wahrscheinlich das gleiche Problem, aber geben Sie es ein paar Wochen/Monate :) – cameronboehmer

Antwort

6

Versuchen Sie, die gulp.watchoptions zu ändern. Dies hat viel gewesen besser für mich:

gulp.watch('./**/*', {interval: 1000, mode: 'poll'}, ['build']); 
1

Jesse's answer nicht für mich arbeiten, aber es war ganz in der Nähe. Nun scheint die Option zu sein:

gulp.watch('./**/*', {interval: 1000, usePoll: true}, ['build']); 

Das mode Feld wurde für den usePoll Feld-Flag abgeschaltet.

Weitere Details finden Sie unter the API section.

6

Für alle gulp4

Der einzige Weg, indem ich diese an die Arbeit könnte, ist „usePolling“ wie unter

verwenden
gulp.watch('./**/*', {interval: 1000, usePolling: true}, gulp.series('superTask')); 
+1

Dies ist ein Lebensretter ... Danke! – dman

4

Sie das Plugin ‚schlucke-watch‘ statt schluck verwenden sollten. Uhr. Letzteres verwendet die Statistikabfrage, die für das gemeinsame Dateisystem viel zu schwer ist. 'gulp-watch' verwendet inotify-Ereignisse, um das Dateisystem unter OSX zu beobachten.