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