它们之间的唯一区别是centos镜像中存在“dev”文件夹,
检查这段代码中的注释(在执行 docker build 时),如果有人能解释为什么,不胜感激?
FROM centos:latest
LABEL maintainer="xxxx"
RUN dnf clean packages
RUN dnf -y install sudo openssh-server openssh-clients curl vim lsof unzip zip
**below works well!**
# RUN mkdir -p oop/script
# RUN cd oop/script
# ADD text.txt /oop/script
**/bin/sh: line 0: cd: dev/script: No such file or directory**
RUN mkdir -p dev/script
RUN cd dev/script
ADD text.txt /dev/script
EXPOSE 22
最佳答案
这里有两件事。
你的问题的根源是 /dev
是一个特殊目录,并为每个 RUN
重新创建命令。所以虽然RUN mkdir -p dev/script
成功创建 /dev/script
目录,该目录在 RUN
之后就消失了命令完成。
此外,像这样的命令...
RUN cd /some/directory
...完全没有操作。这与运行 sh -c "cd /some/directory"
完全相同。在您的本地系统上;而 cd
成功,cd
只影响运行 cd
的进程命令,并且对父进程或后续命令没有影响。如果你真的需要把东西放到
/dev
,您可以将其复制到 Dockerfile 中的其他位置(例如 COPY test.txt /docker/test.txt
),然后在运行时通过您的 CMD
或 ENTRYPOINT
将其复制到 /dev
中的适当位置.
关于linux - 上一个图像中存在文件夹时,docker RUN mkdir 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65952816/