我是 Docker 和 Node.js 新手,我正在尝试使用 Docker 设置 Node.js 应用程序。我更喜欢使用 Docker 而不是
nvm
来管理我的 Node.js 版本。这是我面临的问题:
初始 Dockerfile 设置:
Dockerfile
,内容如下:
Dockerfile FROM node:14 USER node WORKDIR /app
-v ${PWD}:/app
映射卷。docker exec
在容器上打开外壳。npm init --yes && npm i mongoose
,它在容器和我的本地存储库中创建了 node_modules
。修改后的Dockerfile:
Dockerfile
以执行 npm install
、公开端口并添加其他必要的命令。这个设置工作正常,但它在我的本地目录中留下了一个 node_modules
文件夹。npm init
和npm install
,而是直接写了一个package.json
文件。Dockerfile
、FROM
、WORKDIR
和 COPY
创建了标准 EXPOSE
。我没有包含 CMD
,因为还没有要运行的 JS 文件。node_modules
文件夹。我怀疑这是由于使用 -v ${PWD}:/app
安装卷造成的。如何使用 Docker 正确设置 Node.js 应用程序,以便在容器内创建并使用
node_modules
文件夹,而不将其存储在本地?
谢谢您的帮助!
初始 Dockerfile 设置:
Dockerfile
,内容如下:
FROM node:14
USER node
WORKDIR /app
docker build -t my-node-app .
docker run -v ${PWD}:/app -it my-node-app
docker exec -it <container_id> /bin/sh
npm init --yes && npm i mongoose
这在容器和我的本地目录中创建了一个 node_modules
文件夹。修改后的Dockerfile:
Dockerfile
更新为:
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "index.js"]
node_modules
文件夹仍然存在于我的本地目录中。替代方法:
package.json
文件。Dockerfile
:
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "index.js"]
docker build -t my-node-app .
docker run -v ${PWD}:/app -it my-node-app
node_modules
文件夹没有在我的本地目录中创建,但它在容器中也不可用。我希望在 Docker 容器内创建并使用
node_modules
文件夹,而不是出现在我的本地目录中。这样,我可以管理容器内的依赖关系,保持本地工作区干净。我正在寻找解决方案来实现这一目标。
你是对的,node_modules 不应该像其他语言一样存储:
您的方法 #3 是正确的,只是不要安装该卷。
你的 Dockerfile 可以像这样简单
FROM node:22
WORKDIR /opt/
COPY . /opt/
RUN npm install
RUN npm run build
EXPOSE 8080
ENTRYPOINT ["npm","run","start"]
你可以在本地主机上做任何你需要做的事情,但对于服务器上真正的nodejs应用程序,你的容器应该是可移植的和一次性的,因此磁盘不应该用作数据源(json,xml,数据)或文件存储库(csv,报告, pdf、日志等)。