首页 > 解决方案 > mv 命令在 dockerfile 和我的本地 linux 中的作用方式不同

问题描述

我正在查看以下具有以下命令的 jboss/wildfly docker文件:

mv $HOME/wildfly-$WILDFLY_VERSION $JBOSS_HOME

where $WILDFLY_VERSION=17.0.1.Finaland$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中,而不是其内容。有人可以解释为什么我在本地得到这个结果吗?

标签: bashdockerubuntudockerfilewildfly

解决方案


$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”。


推荐阅读