代码之家  ›  专栏  ›  技术社区  ›  user1578872

在Dockerfile中提取gz

  •  0
  • user1578872  · 技术社区  · 6 年前

    我有一个目录结构如下。

    - app
      Dockerfile
       - target
         - test_app.tar.gz
    

    提取焦油.gz将有以下内容,

    - lib
    - conf
    - bin
    

    FROM docker.hub.com/alpine/jdk1.8:latest  
    
    RUN mkdir -p /service \
                /service/app_lib \
                /service/lib
    
    COPY target/test_app.tar.gz /service/app_lib/
    RUN cd  /service/app_lib/ 
    RUN tar -xzf test_app.tar.gz
    RUN rm test_app.tar.gz
    RUN cd lib
    COPY * /service/lib/
    RUN rm app_lib
    

    获取以下错误。

    Step 5/11 : RUN tar -xzf test_app.tar.gz
     ---> Running in edde27a1cc60
    tar (child): test_app.tar.gz: Cannot open: No such file or directory
    tar (child): Error is not recoverable: exiting now
    tar: Child returned status 2
    tar: Error is not recoverable: exiting now
    

    不知道这是怎么回事。

    2 回复  |  直到 6 年前
        1
  •  10
  •   Proyag    6 年前

    影响 RUN cd 命令只对那一行有效,在下一行,你就回来了 / ,因此找不到该文件。使用 WORKDIR 而不是 RUN cd ... 它应该如你所期望的那样工作。 或者你可以把整件事放在一个 RUN 命令式

    RUN cd /service/app_lib/ && tar -xzf test_app.tar.gz && rm test_app.tar.gz
    

    RUN cd lib 部分。

    https://docs.docker.com/engine/reference/builder/#workdir

        2
  •  24
  •   stacksonstacks    6 年前

    ADD 指令将打开 .gz 生成时自动

    ADD target/test_app.tar.gz /service/app_lib
    # Clean up
    RUN rm -rf /service/app_lib/conf \
               /service/app_lib/bin
    
    推荐文章