我的目录结构如下。
- 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
不确定这是怎么回事。
答案 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
部分同样适用。