linux - 上一个图像中存在文件夹时,docker RUN mkdir 不起作用

标签 linux image docker centos

它们之间的唯一区别是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 中的适当位置.

关于linux - 上一个图像中存在文件夹时,docker RUN mkdir 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65952816/

相关文章:

docker - "docker attach"与 "docker start -ai"对于正在运行的容器

c++ - 如何在使用 c++ 中的 sdl、opengl 移动相机时修复奇怪的相机旋转

c - 在 C 中实现异步函数

java - 该命令适用于终端但不适用于 java 程序

linux - 使用 curl 优化 docker 镜像构建大小

c# - 如何在图像上引入叠加层

css - 响应式背景图片 - 全屏

android:图像燃烧效果/动画

git - 将网络存储附加到 Gitlab 的 Docker 容器(ssh 问题)

jenkins - 如何在作为容器运行的 Jenkins 中运行 Docker