当前位置: 首页 > 知识库问答 >
问题:

docker-comment卷上的节点监视不注册删除事件

和魁
2023-03-14

我在docker容器中运行了一个简单的Node.js HTTP服务器。其中一个基本结构文件夹使用volumefromdocker compose.yml镜像主机和容器目录。

在节点服务器中,我使用NPM包chokidar,设置了一个监视程序来跟踪卷目录中的更改(尽管我已经尝试了多个其他监视程序,结果相同)。

const watcher = require("chokidar");

watcher
.watch("./app/experiments", { depth: 0, ignoreInitial: true })
.on("all", (event, path) => {
    console.log(event);
    // ... DO SOME EXPRESS AND WEBPACK STUFF 
});

当我在本地运行节点服务器时,观察者会正确地拾取对所监视目录的更改。在这种情况下,choggar将这些报告为addDirunlink Dir,这对应于我运行的脚手架脚本,用于在目录中添加或删除新文件夹(稍后通过<--plhd--0提供服务)/>())。

标准:

> addDir
> EXPERIMENT ADDED!
> ...
> unlinkDir
> EXPERIMENT DELETED!

但是,当我将应用程序移植到docker容器中时,行为会以一种非常奇怪的方式发生变化。在卷目录中创建新文件夹时,我继续获得addDir事件,但我不再收到unlinkDir(delete)事件!。请注意,只有在主机上的卷目录中添加/删除文件时,才会发生这种情况。如果我在docker容器中的该目录中添加/删除一个文件,我的watcher将正确报告所有这些事件。

在任何一种情况下,卷目录都会正确地镜像自身。例如,文件实际上已被删除或添加,我可以通过将其放入docker容器并运行ls来验证它们是否存在于主机上。

有没有码头工人天才对为什么会发生这种事有圣人的智慧?

关键材料:

OS X 10.13.6

Docker工具箱:

  • Docker 18.03.0-ce

Dockerfile:

FROM node:8.12.0

WORKDIR /usr/dd-labs

COPY package*.json ./
RUN npm install

COPY app/ ./app
COPY server.js ./
COPY webpack/ ./webpack

EXPOSE 8080

Docker-compose.yml:

version: "2"
services:
  app:
    image: #someImageName
    build: .
    ports:
      - "8080:8080"
    labels:
      io.rancher.container.pull_image: always
    environment:
      VIRTUAL_HOST: labs.docker
    volumes:
      - ./app:/usr/dd-labs/app
    command: [sh, -c, "npm run start:dev"]

共有1个答案

微生嘉
2023-03-14

您可能正在使用Docker for Windows,众所周知,它不支持文件系统事件从主机传播到容器。

一种解决方法是在dev环境中使用轮询。使用chokidar,您需要usePolling:true选项。

 类似资料:
  • 我准备好为此拔掉头发了。我正在开发游戏图形用户界面,它有一个由网格单元组成的地图。 单元格网格由StackPane组成,然后由ImageView或Shapes等组成的几个层组成。 整个内容包含在GridPane中,GridPane包含BorderPane的中心元素; 我不能在底层场景中添加鼠标事件,因为所有节点都会得到它- 下面是创建堆栈的代码: 这是设置EventHandler的代码- 谢谢你的

  • 在我的项目中,我有几个由docker-comment管理的容器。我想存储数据从mongoDB持久卷。MongoDB似乎将数据存储在 /data/db,但文件不会传输到我的主机文件系统,重建容器后它们会消失。 这是我的docker-comment配置文件:

  • 我有很多运行docker容器的测试。每个都有一个卷。 如何知道需要删除的卷名? 例如: 手动停止并删除容器后,卷仍然存在。 我不想删除所有卷,因为其中一些卷仍在使用中。

  • 我正在做一个项目,在这个项目中,我需要在一个节点上维护一个表,并且该节点也包括子节点。我尝试过使用PathCache,但我不知道如何在这里监视孩子们的孩子? 这里我的根节点是-,我正在使用下面的代码监视该节点。我想做的是,让手表保持在znode上。假设这些节点被添加到我的根节点- 然后我应该得到通知(直到这一部分我能够使它工作),但如果任何新节点被添加、更新或删除到,和,那么我也应该得到通知,而这

  • 我正在使用Firebase作为web应用程序。它是用纯Javascript编写的,不使用外部库。 我可以“推送”并使用“.on(”child_added“)”检索数据,但是“.remove()”不能按照它所说的方式工作。根据 API, “Firebase.remove()-删除此Firebase位置的数据。子位置的任何数据也将被删除。删除的效果将立即可见。” 然而,移除不是立即发生的;只有在整个脚

  • 我最近开始为Zookeeper使用Python。我正在使用动物园管理员的库。我需要监视我的根节点- 可能会添加到我上面的根节点的其他几个节点如下- 现在我需要检查添加到根节点中的子节点是否为。如果节点被添加到中,那么我将只监视节点,如果任何新的子节点被添加到节点中,那么我也需要监视该节点。 比如说,的子代是,所以现在我需要监视,然后如果在这个节点上添加了任何新节点,比如和,那么我需要打印节点的子节