[英]How can I copy node_modules folder out of my docker container onto the build machine?
我正在将应用程序移动到新的构建管道。 在 CI 上,我无法安装节点来完成 NPM 安装步骤。
我的想法是将 npm install 步骤移动到使用 Node 的 Docker 映像,安装节点模块,然后将节点模块复制回主机,以便另一个进程可以打包应用程序。
这是我的 Dockerfile:
FROM node:9
# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Install app dependencies
COPY ./dashboard-interface/package.json /usr/src/app/
RUN npm install --silent --production
# Bundle app src
COPY node_modules ./dashboard-interface/node_modules #I thought this would copy the new node_modules back to the host
这运行良好并安装节点模块,但是当我尝试将 node_modules 目录复制回主机时,我看到一条错误消息:
COPY node_modules ./dashboard-interface/node_modules
COPY failed: stat /var/lib/docker/tmp/docker-builder718557240/node_modules: no such file or directory
所以很明显,复制过程也找不到它刚刚安装节点模块的node_modules目录。
简单而可靠的方法是进行卷映射,例如docker-compose yaml
文件将有一个卷部分,如下所示:
….
volumes:
- ./: /usr/src/app
- /usr/src/app/node_modules
对于 docker run 命令,请使用:
-v ./:/usr/src/app
在 Dockerfile 上,定义:
VOLUME /usr/src/app
VOLUME /usr/src/app/node_modules
但首先确认运行npm install
确实在主机系统上创建了 node_modules 目录。
让我尝试解决您遇到的问题。
这是Dockerfile
# Use alpine for slimer image
FROM node:9-alpine
RUN mkdir /app
WORKDIR /app
COPY /dashboard-folder/package.json .
RUN npm i --production
COPY node_modules ./root
假设您的项目结构如下所示:
|root
| Dockerfile
|
\---dashboard-folder
package.json
其中 root 是您将接收node_modules
工作目录
使用docker build . -t name
构建镜像这个镜像docker build . -t name
docker build . -t name
然后像这样使用它:
docker run -it --rm ${PWD}:/app/root NAME mv node_modules ./root
应该做的伎俩。
您遇到问题的主要原因取决于主机上运行的操作系统。 如果您的主机运行 Linux,那么肯定没问题,但如果您的主机在 Mac 或 Windows 上,那么发生的情况是 docker 实际上运行在对您隐藏的 VM 上,因此您无法直接映射到主机的路径系统。 相反,您可以使用 Volume。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.