【问题标题】:docker RUN mkdir does not work when folder exist in prev image当上一个图像中存在文件夹时,docker RUN mkdir 不起作用
【发布时间】:2021-01-30 19:03:19
【问题描述】:

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

【问题讨论】:

    标签: linux image docker centos


    【解决方案1】:

    这里发生了两件事。

    问题的根源在于/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 中的适当位置。

    【讨论】:

    • 非常感谢,这正是我要找的东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 2021-06-07
    • 2022-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-23
    相关资源
    最近更新 更多