在Dockerfile中提取gz

时间:2018-08-29 04:13:42

标签: docker dockerfile

我的目录结构如下。

- app
  Dockerfile
   - target
     - test_app.tar.gz

tar.gz的提取内容如下

- lib
- conf
- bin

我想提取lib / *文件夹并将其添加到Docker映像中。

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 个答案:

答案 0 :(得分:9)

ADD指令将在构建时自动解包.gz

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

答案 1 :(得分:2)

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