如何修复"目录不是空的"在docker build期间移动?

时间:2018-01-18 11:14:08

标签: node.js docker npm dockerfile yarnpkg

我有一个用于节点应用程序的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命令不在这里工作?

1 个答案:

答案 0 :(得分:0)

运行docker build .时,当前目录将作为其上下文传递。最有可能的情况是你已经在你的主机上运行了yarn install命令,这就是为什么你有一个

的原因

/app/node_modules

这就是它无法移动的原因,因为它已经存在。

为避免在上下文中传递文件夹,您可以添加:

node_modules/

.dockerignore文件中。

相关问题