linux - 上一个图像中存在文件夹时,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
解决方案
这里有两件事。
您的问题的根源是这是一个特殊的目录,并且会为每个命令/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
在.CMD
ENTRYPOINT
/dev
推荐阅读
- algorithm - 为什么 IDA* 比 A* 快,但为什么 IDA* 访问的节点比 A* 多?
- java - IntelliJ Java groovy 缺少库?
- ios - 如何使用 Realm 和 Swift 从 TableView 中删除部分和行?
- c# - 使用 XPath 向多个元素添加元素无法按预期工作
- c# - 如何获取 DB 关系的一行中的所有值并将它们中的每一个分配给 ASP.NET C# 中的变量
- c - 功能故障
- javascript - 实现搜索功能的问题“TypeError:data.filter 不是函数”
- entity-framework-core - 使用 EF Core 获取 Long 列表
- python - 如何将列表的多个元素传递给自定义函数中的参数 - Python
- c# - 我的播放器不会坚持使用平台,我似乎无法找到解决方案