docker 运行 当文件夹存在于上一个图像中时,mkdir 不起作用

docker RUN mkdir does not work when folder exist in prev image

它们之间唯一的区别是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),然后在运行时通过您的 CMDENTRYPOINT 将其复制到 /dev.

中的适当位置