我有一个用于节点应用程序的Dockerfile:
FROM node:8.8
ENV TERM=xterm-color NPM_CONFIG_LOGLEVEL=warn PATH="$PATH:/usr/src/app/node_modules/.bin/"
VOLUME ["/logs"]
WORKDIR /tmp/node
ADD package.json yarn.lock .npmrc ./
RUN yarn install --frozen-lockfile --ignore-platform --ignore-engines --quiet
WORKDIR /usr/src/app
ADD . /usr/src/app
RUN mv /tmp/node/* ./ && tsc && webpack
CMD ["node", "/usr/src/app/server"]
我想在构建期间为node_modules
重新创建缓存行为,因此我更新了另一个项目的Dockerfile,看起来非常相似。
FROM node:9-alpine
WORKDIR /tmp/node
ADD package.json yarn.lock ./
RUN yarn install --frozen-lockfile --ignore-platform --ignore-engines --quiet
WORKDIR /app
ADD . /app/
RUN mv /tmp/node/* ./
EXPOSE 1337
CMD ["yarn", "start"]
然而对于那个Dockerfile,我在以下期间遇到了意外错误:
$ docker build .
...
Step 7/9 : RUN mv /tmp/node/* ./
---> Running in 51543827cd89
mv: can't rename '/tmp/node/node_modules': Directory not empty
The command '/bin/sh -c mv /tmp/node/* ./' returned a non-zero code: 1
为什么mv
命令不在这里工作?
答案 0 :(得分:0)
运行docker build .
时,当前目录将作为其上下文传递。最有可能的情况是你已经在你的主机上运行了yarn install
命令,这就是为什么你有一个
/app/node_modules
这就是它无法移动的原因,因为它已经存在。
为避免在上下文中传递文件夹,您可以添加:
node_modules/
在.dockerignore
文件中。