我正在尝试从Dockerfile创建一个Image。
# 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
构建Image时,目录不会更改为/ root / 。我认为问题可能是缺少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
root@100b02ddc98a:/# pwd
/
root@100b02ddc98a:/# cd /root/
root@100b02ddc98a:~# pwd
/root
请帮助找出造成问题的原因。
答案 0 :(得分:5)
使用WORKDIR
https://docs.docker.com/engine/reference/builder/#workdir
或在一次RUN中完成所有操作
你的cd
已被遗忘"当你在另一次跑步时
顺便说一句,将您的RUN分组,如Dockerfile最佳实践中所示
https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/
答案 1 :(得分:3)
你需要在RUN中使用WORKDIR而不是cd。 https://docs.docker.com/engine/reference/builder/#workdir
WORKDIR /path/to/workdir
WORKDIR指令设置工作 任何RUN,CMD,ENTRYPOINT,COPY和ADD指令的目录 在Dockerfile中关注它。如果WORKDIR不存在,它将是 即使它未在任何后续Dockerfile中使用,也会创建 指令。它可以在一个Dockerfile中多次使用。如果是亲戚 提供路径,它将相对于前一个路径 WORKDIR指令。例如:
WORKDIR / WORKDIR b WORKDIR c RUN pwd最终密码的输出 这个Dockerfile中的命令是/ a / b / c。
WORKDIR指令可以先解析环境变量 使用ENV设置。您只能使用显式设置的环境变量 在Dockerfile中。例如:
ENV DIRPATH / path WORKDIR $ DIRPATH / $ DIRNAME RUN pwd输出 此Dockerfile中的最终pwd命令为/ path / $ 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
答案 2 :(得分:0)
将var arrayCollections = ${jsonArray};
$('#jstreesD').jstree({
'core' : {
],
'data' :[ arrayCollections,'<button>Press</button> Ok'],
},
})
<div id="jstreesD"></div>
替换为RUN cd /root
,将WORKDIR /root
替换为RUN cd virtualgatewayconsole_package
或使用
WORKDIR virtualgatewayconsole_package
阅读this