无法更改目录,同时建立码头使用码头文件图像
我想从Dockerfile创建一个图像。无法更改目录,同时建立码头使用码头文件图像
# cat Dockerfile
FROM ubuntu:16.04
COPY $pwd/intel_virtual_gateway_console64_1_9_0.tar /root/
COPY $pwd/login.exp /root/
RUN cd /root
RUN echo $PWD
RUN tar -xvf intel_virtual_gateway_console64_1_9_0.tar
RUN cd virtualgatewayconsole_package
RUN apt-get update && apt-get install expect \
expect-dev
在构建图像的目录不获取改为/根/。我认为问题可能是tar文件丢失,以便确认在将其更改为/ root目录后打印当前工作目录。但是,我已在容器中验证了软件包已成功复制到/ root目录。我甚至通过对其他目录的实验进行了验证,即使那些目录没有改变。 由于对这一问题的后续步骤失败:
# docker build -t release:1.0 .
Sending build context to Docker daemon 633.2MB
Step 1/8 : FROM ubuntu:16.04
---> 6a2f32de169d
Step 2/8 : COPY $pwd/intel_virtual_gateway_console64_1_9_0.tar /root/
---> Using cache
---> 36e9ea407082
Step 3/8 : COPY $pwd/login.exp /root/
---> Using cache
---> 578f9f9481d9
Step 4/8 : RUN cd /root
---> Running in 07ccfc507888
---> ad60f9d31c7e
Removing intermediate container 07ccfc507888
Step 5/8 : RUN echo $PWD
---> Running in e0ec2df6a0dc
/
---> 979a42368814
Removing intermediate container e0ec2df6a0dc
Step 6/8 : RUN tar -xvf intel_virtual_gateway_console64_1_9_0.tar
---> Running in 0701db595e27
tar: intel_virtual_gateway_console64_1_9_0.tar: Cannot open: No such file or directory
tar: Error is not recoverable: exiting now
The command '/bin/sh -c tar -xvf intel_virtual_gateway_console64_1_9_0.tar' returned a non-zero code: 2
但能够改变容器内的目录。
# docker run -it 979a42368814 /bin/bash
[email protected]:/# pwd
/
[email protected]:/# cd /root/
[email protected]:~# pwd
/root
请帮助找出是什么原因造成的问题。
使用WORKDIR
https://docs.docker.com/engine/reference/builder/#workdir
或做在一个RUN
你cd
被 “遗忘” 当你在另一个运行
顺便说一句,组跑步,因为在Dockerfile最佳实践中指出
https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/
您需要在RUN中使用WORKDIR而不是cd。 https://docs.docker.com/engine/reference/builder/#workdir
WORKDIR /path/to/workdir
工作目录的指令设置工作 目录任何运行,CMD,入口点,COPY并添加 遵循它在Dockerfile说明。如果WORKDIR不存在,即使未在任何后续的Dockerfile 指令中使用,也会创建 。它可以在一个Dockerfile中多次使用。如果提供了相对的路径,它将相对于以前的 WORKDIR指令的路径。例如:
WORKDIR/a WORKDIR b WORKDIR c RUN pwd此Dockerfile中最终pwd 命令的输出为/ a/b/c。
WORKDIR指令可以解析先前使用ENV设置的环境变量 。您只能在Dockerfile中使用明确设置为 的环境变量。例如:
ENV DIRPATH /路径WORKDIR $ DIRPATH/$ DIRNAME RUN命令pwd的 最终pwd命令的输出在此Dockerfile将是/路径/ $ DIRNAME
# cat Dockerfile
FROM ubuntu:16.04
COPY $pwd/intel_virtual_gateway_console64_1_9_0.tar /root/
COPY $pwd/login.exp /root/
WORKDIR /root
RUN echo $PWD
RUN tar -xvf intel_virtual_gateway_console64_1_9_0.tar
WORKDIR virtualgatewayconsole_package
RUN apt-get update && apt-get install expect \
expect-dev
关于分组RUN命令: 您想要将命令按照逻辑的方式分组到您认为是图层的任何地方。可能是其他图像模板的东西。如果您将此视为单层,那么只需将所有运行命令与& & s连接即可。另外,最终的WORKDIR将成为Docker镜像的当前工作目录,因此请牢记这一点。
# cat Dockerfile
FROM ubuntu:16.04
COPY $pwd/intel_virtual_gateway_console64_1_9_0.tar /root/
COPY $pwd/login.exp /root/
RUN cd /root && \
echo $PWD && \
tar -xvf intel_virtual_gateway_console64_1_9_0.tar && \
cd virtualgatewayconsole_package && \
apt-get update && apt-get install expect \
expect-dev
WORKDIR /root/virtualgatewayconsole_package
与WORKDIR /root
和RUN cd virtualgatewayconsole_package
替换RUN cd /root
与WORKDIR virtualgatewayconsole_package
或使用
RUN cd /root && echo $PWD && tar -xvf intel_virtual_gateway_console64_1_9_0.tar && cd virtualgatewayconsole_package && apt-get update && apt-get install expect \
expect-dev
读this