【发布时间】:2023-02-03 09:38:12
【问题描述】:
我遇到了一个奇怪的问题,我目前正在使用 Windows 10 并通过 WSL2 运行 docker,我在我的 Windows 文件管理器中克隆了存储库,我试图在 DEV 中运行它,也就是说,一旦我更新了一个我的本地存储库中的文件此更改反映在容器中,但这没有发生,我尝试了不同的方法。
我的dockerfile是这样的
FROM node:14-alpine
WORKDIR /src
ADD package.json /src
RUN npm i --silent
ADD . /src
RUN npm run build
CMD npm start
然后我用 docker build -t test 构建这个图像。
之后,我尝试上传如下所示的 docker-compose。
version: '3'
services:
app:
build: .
command: npm run start:dev
ports:
- 4000:4000
volumes:
- .:/src/
- /src/node_modules
volumes:
nodemodules: {}
甚至执行 docker-compose up --build,当我更改文件时它也不会自动重新加载。
但是当我在下面的存储库中正确克隆并重复所有步骤时,实时/热重载正常工作。
https://github.com/ThomasOliver545/nestjs-local-development-docker-compose-hot-reload
这些是我在这个项目(新项目)中的依赖项。
"dependencies": {
"@nestjs/common": "^9.0.0",
"@nestjs/core": "^9.0.0",
"@nestjs/platform-express": "^9.0.0",
"reflect-metadata": "^0.1.13",
"rimraf": "^3.0.2",
"rxjs": "^7.2.0"
},
"devDependencies": {
"@nestjs/cli": "^9.0.0",
"@nestjs/schematics": "^9.0.0",
"@nestjs/testing": "^9.0.0",
"@types/express": "^4.17.13",
"@types/jest": "28.1.8",
"@types/node": "^16.0.0",
"@types/supertest": "^2.0.11",
"@typescript-eslint/eslint-plugin": "^5.0.0",
"@typescript-eslint/parser": "^5.0.0",
"eslint": "^8.0.1",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-prettier": "^4.0.0",
"jest": "28.1.3",
"prettier": "^2.3.2",
"source-map-support": "^0.5.20",
"supertest": "^6.1.3",
"ts-jest": "28.0.8",
"ts-loader": "^9.2.3",
"ts-node": "^10.0.0",
"tsconfig-paths": "4.1.0",
"typescript": "^4.7.4"
},
我究竟做错了什么?
我只需要实时/热重载即可工作。
更新伙计们...我刚刚用 ubuntu 创建了一个 VM,并运行了与我的 Windows 上运行的代码相同的代码,并且热/实时重新加载工作正常,显然没有办法让容器通知存储区域工作中存在的代码更改从窗口进入容器。
【问题讨论】:
-
Docker 如何适应这个设置?您可以直接在您的主机上使用 Node,而不涉及 Docker 容器(并且没有 Docker 的文件系统隔离功能)吗?
-
我的主要想法是扩展项目,即创建数据库,将其放在同一个网络上......我只留下了 API,因为我想让它首先为我的上下文工作,这是应用程序的实时重新加载从我的目录映射 - >从容器内部。
-
您可以将基于 Docker 的数据库与基于主机的开发环境结合使用,我发现如果需要的话,这是一种获取临时数据库的非常有效的方法。
-
比我最大的问题更糟糕的是热重载,我想先解决这个问题,才能实现数据库。
-
我需要这个视频中发生的事情发生在第 58:37 分钟youtube.com/watch?v=RIyZEC76a98&t
标签: docker docker-compose nestjs reload hot-reload