bash - mv 命令在 dockerfile 和我的本地 linux 中的作用方式不同
问题描述
我正在查看以下具有以下命令的 jboss/wildfly docker文件:
mv $HOME/wildfly-$WILDFLY_VERSION $JBOSS_HOME
where $WILDFLY_VERSION=17.0.1.Final
and$JBOSS_HOME=/opt/jboss/wildfly.
因此生成的命令转换为:
mv $HOME/wildfly-17.0.1.Final /opt/jboss/wildfly
稍后在文件中,我们像这样启动 wildfly:
CMD ["/opt/jboss/wildfly/bin/standalone.sh", "-b", "0.0.0.0"]
所以我假设mv
上面的命令获取了 $HOME/wildfly-17.0.1.Final
目录的内容并将其放入/opt/jboss/wildfly
目录中。
但是,如果我尝试从本地机器(ubuntu 18.04)上的 dockerfile 重新创建步骤mv $HOME/wildfly-17.0.1.Final /opt/jboss/wildfly
,我最终会得到以下目录结构/opt/jboss/wildfly/wildfly-17.0.1.Final
。也就是说,wildfly-17.0.1.Final
目录本身被复制到/opt/jboss/wildfly
中,而不是其内容。有人可以解释为什么我在本地得到这个结果吗?
解决方案
$JBOSS_HOME
路径不存在。
该mv
命令实际上是用文件夹替换不存在的目录$HOME/wildfly-17.0.1.Final
。话虽如此,内容$HOME/wildfly-17.0.1.Final/
将被移动到$JBOSS_HOME
将文件夹名称从“wildfly-17.0.1.Final”替换为“wildfly”。
简单示例如下:
创建一个空目录并触摸其中的文件,然后尝试执行以下操作:
mv dir /var/lib/non_existing_folder
dir 将按原样移动并替换“non_existing_folder”。
推荐阅读
- visual-studio-code - 如何在 VS Code 中配置换行缩进大小?
- android - Android 一次性设备 (COSU) 重启后无法进入 lockTaskMode
- html - IE 10 海报图像被视频标签中的源覆盖
- java - 如何在方法中模拟 this.method()?
- asp.net - web.config 中的 ip 范围模式
- javascript - 如何将 YAML 文件转换为 Dockerfile
- c++ - 从函数 BY VALUE 返回一个数组,当你返回一个结构时会发生什么?
- android - Android-TV RecyclerView 始终保持焦点在顶部
- regex - 连续 9 个相同数字的模式
- google-cloud-datastore - 将 Web 安全密钥用法具体化