首页 > 解决方案 > 上一个图像中存在文件夹时,docker RUN mkdir 不起作用

问题描述

它们之间的唯一区别是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

标签: linuximagedockercentos

解决方案


这里有两件事。

您的问题的根源是这是一个特殊的目录,并且会为每个命令/dev重新创建。RUN因此,虽然RUN mkdir -p dev/script成功创建了一个目录,但命令完成/dev/script后该目录就消失了。RUN

此外,像这样的命令...

RUN cd /some/directory

...完全没有操作。sh -c "cd /some/directory"这与在本地系统上运行完全相同;cd成功时,只会cd影响运行cd命令的进程,对父进程或后续命令没有影响。

如果你/dev真的需要COPY test.txt /docker/test.txt在.CMDENTRYPOINT/dev


推荐阅读