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

时间:2018-06-16 14:05:14

标签: bash shell docker dockerfile symlink

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

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

    ls: /usr/src/app/node_modules/@boiler/utilities: No such file or directory
    
  4. 就像符号链接不会持久化一样。如果我使用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"]
    

1 个答案:

答案 0 :(得分:0)

[查看评论]我提出了问题。 发生的是毛线安装正在重新创建node_modules目录,因此您必须在安装所有其他模块之后创建符号链接。我想是有道理的,但是我认为它会只写到已经存在的目录中