我正在查看以下jboss / wildfly docker file,它具有以下命令:
mv $HOME/wildfly-$WILDFLY_VERSION $JBOSS_HOME
其中$WILDFLY_VERSION=17.0.1.Final
和$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
目录中。但是,如果我在执行
mv $HOME/wildfly-17.0.1.Final /opt/jboss/wildfly
时尝试从本地计算机(ubuntu 18.04)上的dockerfile重新创建步骤,则最终得到以下目录结构/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”。
关于bash - mv命令在dockerfile和本地linux中的行为方式的差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57358767/