【问题标题】:Why Docker Build Fails in Docker in Docker Jenkins Build: ‘/proc/1/map_files’: Operation not permitted为什么 Docker 构建在 Docker Jenkins 构建中的 Docker 中失败:‘/proc/1/map_files’:不允许操作
【发布时间】:2018-09-24 05:22:28
【问题描述】:

以下指令在 MacOS Docker Engine 18.04 中正确构建,而在运行 Docker 的 Jenkins 容器(Docker-in-Docker,dind,Inception)中构建时,相同的指令失败......为什么是错误的原因和有什么解决办法?

MacOS 上的本地 docker 构建

Step 12/16 : RUN find / -name "spring-cloud-config-server*.jar" 
               ! -name "*sources*" -exec cp -t /tmp {} + && 
               mkdir /runtime &&
               mv /tmp/spring-cloud-config*.jar /runtime/config-service.jar &&
               rm -f /*.jar
 ---> Using cache

Docker-in-Docker Jenkins 构建

Step 12/16 : RUN find / -name "spring-cloud-config-server*.jar" 
               ! -name "*sources*" -exec cp -t /tmp {} + && 
               mkdir /runtime &&
               mv /tmp/spring-cloud-config*.jar /runtime/config-service.jar &&
               rm -f /*.jar

 ---> Running in f64908a07aa1
find: ‘/proc/1/map_files’: Operation not permitted
find: ‘/proc/7/map_files’: Operation not permitted

The command '/bin/sh -c find / -name "spring-cloud-config-server*.jar" 
   ! -name "*sources*" -exec cp -t /tmp {} + &&   mkdir /runtime &&   
   mv /tmp/spring-cloud-config*.jar /runtime/config-service.jar &&   
   rm -f /*.jar' returned a non-zero code: 1

script returned exit code 1

【问题讨论】:

    标签: docker jenkins docker-in-docker


    【解决方案1】:

    解决方案

    • 避免使用全局搜索find /,因为它涉及其他目录
      • 在 docker 构建说明中,这些额外的目录可能对正在运行的 docker 用户具有不同的 rw 权限,

    上述问题已通过以下方式解决:

    RUN mkdir /runtime && \
        find /tmp -name "spring-cloud-config-server*.jar" ! -name "*sources*" -exec cp -t /runtime {} + && \
        mv /runtime/spring-cloud-config*.jar /runtime/config-service.jar && \
        rm -f /tmp/*.jar
    

    说明

    答案在于以下几个概念:

    • dind 中运行的 docker 容器正在添加仅主机操作系统允许的进程。
    • 在运行命令find / 的同时,该命令也在扫描目录/proc,该目录由dind 进程拥有。
    • 因此,在本地构建不会导致问题,因为与 dind 相比,Mac 中的 docker 引擎具有权限并且不会泄漏额外的 /proc

    【讨论】:

      猜你喜欢
      • 2018-09-09
      • 2022-09-24
      • 2018-06-27
      • 1970-01-01
      • 1970-01-01
      • 2020-10-18
      • 1970-01-01
      • 2023-03-03
      相关资源
      最近更新 更多