为什么我的 docker 容器不监听文件中的更改

Jua*_*gés 2 typescript docker docker-compose nestjs

所以我已经使用 docker-compose 在 NestJS 和 Docker 上开发这个后端大约 6 个月了,但从来没有遇到过我的 docker 不监听我的文件更改的问题。几天前,这种情况开始发生,我不知道为什么。

\n

这是我的 Dockerfile

\n
FROM node:14-alpine\n\nENV NODE_ENV development\n\nENV NODE_OPTIONS=--max_old_space_size=8192\n\nRUN mkdir -p /usr/src/app\n\nWORKDIR /usr/src/app\n\nCOPY . .\n\nRUN yarn install\n\nENTRYPOINT ["yarn", "start:dev"]\n
Run Code Online (Sandbox Code Playgroud)\n

这是我的 docker-compose 文件

\n
services:\n  api:\n    image: cacao-be\n    container_name: cacao-be-api\n    build:\n      context: .\n      dockerfile: Dockerfile\n    ports:\n      - '3000:3000'\n    depends_on:\n      - postgres\n    volumes:\n      - ./src:/usr/src/app/src\n    networks:\n      - default\n    links:\n      - redis\n    env_file:\n      - .env\nvolumes:\n  db_data:\n  admin_data:\n  redis_data:\n    driver: local\n
Run Code Online (Sandbox Code Playgroud)\n

这是我的 package.json,其中包含启动我的项目的脚本

\n
"scripts": {\n    "prebuild": "rimraf dist",\n    "build": "nest build",\n    "format": "prettier --write \\"src/**/*.ts\\" \\"test/**/*.ts\\"",\n    "start": "nest start",\n    "start:dev": "nest start --watch"\n}\n
Run Code Online (Sandbox Code Playgroud)\n

这里\xc2\xb4s也是我的tsconfig文件

\n
{\n  "compilerOptions": {\n    "jsx": "react",\n    "module": "commonjs",\n    "declaration": true,\n    "removeComments": true,\n    "emitDecoratorMetadata": true,\n    "experimentalDecorators": true,\n    "allowSyntheticDefaultImports": true,\n    "esModuleInterop": true,\n    "target": "es2017",\n    "sourceMap": true,\n    "outDir": "./dist",\n    "baseUrl": "./",\n    "incremental": true,\n    "resolveJsonModule": true,\n    "skipLibCheck": true,\n},\n}\n\n
Run Code Online (Sandbox Code Playgroud)\n

和 tsconfig.build.json 文件

\n
{\n  "extends": "./tsconfig.json",\n  "exclude": ["node_modules", "test", "dist", "**/*spec.ts"]\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我尝试在没有 docker 的情况下运行我的项目,它确实监听文件更改,但是当我在 docker 中运行它时,它停止监听它们。我已经验证过,在这两种方法中它都以监视模式运行。\nStarting compilation in watch mode...

\n

另外,我已经通过cmd进入我的容器,并检查文件在我修改它们时是否发生变化,并且它们确实发生了变化(我可以证明我的服务安装良好)。所以容器内部的文件发生了变化,但它并没有重新启动开发

\n

我已经设置了

\n
command: npm run start:dev\n
Run Code Online (Sandbox Code Playgroud)\n

在我的 docker-compose 文件中,但它不起作用。清理我的泊坞窗并重新启动它也不起作用。

\n

我期望的是,当我保存文件时,我的 docker 日志会重新启动并应用更改。

\n

msr*_*mon 5

很抱歉参加聚会迟到了。实际上这是由于TypeScript版本造成的。如果你把它升级到4.9,那么它就不再起作用了。因为在 中4.9,他们更改了监视文件的方式,并且现在使用 FS 事件而不是传统轮询。你可以在这里读更多关于它的内容。因此,如果您想让它再次工作,请4.8.4暂时使用。在您的 中,像这样package.json更改版本:typescript

{
  ...
  "devDependencies": {
    ...
    "typescript": "~4.8.4",
    ...
  },
  ...
}
Run Code Online (Sandbox Code Playgroud)