Docker 文件,符号链接在构建过程中消失

Docker file, symlink disappears mid build

我有以下 docker 文件(在底部)。我正在使用另一个图像来获取预编译库(实用程序)并将其复制到新图像的路径中。然后我需要将该目录符号链接到我的 node_modules 目录中。这很好用,我有 3 个地方可以证明这个问题。

  1. 检查原始根目录/utilities 是否存在。这有效,我可以看到文件
    • 然后我创建符号链接:ln -sf ...
  2. 我想查看符号链接位置的内容。这有效,我可以看到文件。
    • 我继续创建图像的其余部分
  3. 最后我再次列出文件,现在我得到了

    ls: /usr/src/app/node_modules/@boiler/utilities: No such file or directory
    

好像符号链接不持久。如果我 运行 带有 shell 的容器:docker run -it --entrypoint=sh backend:latest 并创建符号链接它可以工作。

关于我的符号链接的去向有什么想法吗?

FROM utilities-setup:latest as build

FROM node:8.5.0-alpine
COPY --from=build /utilities /utilities
RUN ls -l /utilities <-- 1. THIS WORKS, FILES EXIST

#setup directories
RUN mkdir -p /usr/src/app/node_modules/@boiler/
WORKDIR /usr/src/app

#create symlink to the utilities module into the boiler module
RUN ln -sf /utilities /usr/src/app/node_modules/@boiler/

RUN ls /usr/src/app/node_modules/@boiler/utilities <-- 2. THIS WORKS, FILES EXIST

#copy the content of the backend to the current direcotry
COPY . .
RUN yarn install
RUN ls /usr/src/app/node_modules/@boiler/utilities <-- 3. THIS FAILS, NO MODULE

RUN ["chmod", "+x", "./scripts/prod.sh"]
EXPOSE 8080
ENTRYPOINT ["/usr/src/app/scripts/prod.sh"]

[看评论]我打卡了这个问题。 发生的事情是 yarn install 正在重新创建 node_modules 目录,因此您必须在安装所有其他模块后创建符号链接。我想是有道理的,但我认为如果它已经存在,它只会写入目录