Docker 文件,符号链接在构建过程中消失
Docker file, symlink disappears mid build
我有以下 docker 文件(在底部)。我正在使用另一个图像来获取预编译库(实用程序)并将其复制到新图像的路径中。然后我需要将该目录符号链接到我的 node_modules 目录中。这很好用,我有 3 个地方可以证明这个问题。
- 检查原始根目录/utilities 是否存在。这有效,我可以看到文件
- 然后我创建符号链接:
ln -sf ...
- 我想查看符号链接位置的内容。这有效,我可以看到文件。
- 我继续创建图像的其余部分
最后我再次列出文件,现在我得到了
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 目录,因此您必须在安装所有其他模块后创建符号链接。我想是有道理的,但我认为如果它已经存在,它只会写入目录
我有以下 docker 文件(在底部)。我正在使用另一个图像来获取预编译库(实用程序)并将其复制到新图像的路径中。然后我需要将该目录符号链接到我的 node_modules 目录中。这很好用,我有 3 个地方可以证明这个问题。
- 检查原始根目录/utilities 是否存在。这有效,我可以看到文件
- 然后我创建符号链接:
ln -sf ...
- 然后我创建符号链接:
- 我想查看符号链接位置的内容。这有效,我可以看到文件。
- 我继续创建图像的其余部分
最后我再次列出文件,现在我得到了
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 目录,因此您必须在安装所有其他模块后创建符号链接。我想是有道理的,但我认为如果它已经存在,它只会写入目录