Jum*_*mpa 7 node.js docker nodemon dockerfile docker-container
我正在尝试在 docker 容器中使用 nodemon:
文件
FROM node:carbon
RUN npm install -g nodemon
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD [ "nodemon" ]
Run Code Online (Sandbox Code Playgroud)
构建/运行命令
docker build -t tag/apt .
docker run -p 49160:8080 -v /local/path/to/apt:/usr/src/app -d tag/apt
Run Code Online (Sandbox Code Playgroud)
将本地卷附加到容器以观察代码更改,会导致一些覆盖和 nodemon 抱怨找不到节点模块(其中任何一个)。我该如何解决这个问题?
在您中Dockerfile,您npm install在复制package*json文件后正在运行。一个node_modules目录被正确创建/usr/src/app,你很高兴。
但是,当您将本地目录挂载到 上时/usr/src/app,容器内该目录的内容将被节点项目的本地版本覆盖,该版本显然缺少该node_modules目录,从而导致您遇到错误。
npm install挂载目录后,您需要在正在运行的容器上运行。例如,您可以运行以下内容:
docker exec -ti <containername> npm install
Run Code Online (Sandbox Code Playgroud)
请注意,您必须暂时将CMD指令更改为以下内容:
CMD ["sleep", "3600"]
Run Code Online (Sandbox Code Playgroud)
为了能够进入容器。
这将导致在您的本地目录中创建一个 node_modules 目录,并且您的容器应该正确运行 nodemon (切换回当前的CMD)。
小智 7
TL;DR:npm install在子文件夹中,同时将node_modules文件夹移动到根目录。
尝试这个配置看看,它应该对你有帮助。
FROM node:carbon
RUN npm install -g nodemon
WORKDIR /usr/src/app
COPY package*.json /usr/src/app/
RUN npm install && mv /usr/src/app/node_modules /node_modules
COPY . /usr/src/app
EXPOSE 8080
CMD [ "nodemon" ]
Run Code Online (Sandbox Code Playgroud)
正如另一个答案所说,即使你已经跑npm install了你的WORKDIR. 当您安装该卷时,该卷的内容WORKDIR将暂时被您的安装文件夹替换,该文件夹npm install未运行。
当节点在多个位置搜索其所需包时,解决方法是将“已安装”node_modules文件夹移动到根目录,这是其所需路径之一。
这样做您仍然可以更新代码,直到您需要新的包,而该映像需要另一个build.
我引用了这个docker 示例项目中的 Dockerfile 。
| 归档时间: |
|
| 查看次数: |
17121 次 |
| 最近记录: |