Chokidar不在Docker容器内部进行文件更改
我正在使用docker for mac版本1.12.0-rc2作为反应项目。 我的工作stream程是:
- OS X上的
src/
文件夹被安装到容器中 - 当开发人员修改
src/
的文件时,会将其转换为ES5并置于public/
(此工作)。 - 当
public/
另一个观察者更改文件触发热重新加载(在我的本地主机,但不在容器中)。
这是我从第3步的步骤观察者代码:
// root = "/src" const watcher = chokidar.watch(root, { usePolling: true, awaitWriteFinish: { pollInterval: 100, stabilityThreshold: 250 }, ignored: /\.(git|gz|map)|node_modules|jspm_packages|src/, ignoreInitial: true, persistent: true }) .on("change", function fileWatcher(filename) { const modulePath = filename.replace(`${root}/`, ""); wss.clients.forEach(function sendFileChange(client) { send("filechange", modulePath, client); }); if (cache[filename]) { wss.clients.forEach(function sendCacheFlush(client) { send("cacheflush", filename, client); }); delete cache[filename]; } });
和我的docker-compose.yml文件:
version: '2' services: wildcat: build: context: . args: JSPM_GITHUB_AUTH_TOKEN: image: "nfl/react-wildcat-example:latest" environment: NODE_ENV: development PORT: 3000 STATIC_PORT: 4000 COVERAGE: LOG_LEVEL: NODE_TLS_REJECT_UNAUTHORIZED: 0 CHOKIDAR_USEPOLLING: 'true' volumes: - ./src:/src/src - ./api:/src/api ports: - "3000:3000" - "4000:4000" ulimits: nproc: 65535 entrypoint: "npm run" command: "dev"
花了一两天后,我发现这个问题,行:
ignored: /\.(git|gz|map)|node_modules|jspm_packages|src/,
导致chokidar忽略/src
这是我所有的源代码复制到泊坞窗容器中的文件夹。 我把Dockerfile和docker-compose.yml中的这个path改成了/code
而且一切都按预期工作。