在docker run命令不起作用的情况下使用绝对路径

在docker run命令不起作用的情况下使用绝对路径,docker,Docker,这两个docker运行命令之间的区别是什么?为什么一个运行而另一个不运行 工作命令 docker run--publish=7474:7474--volume=$HOME/neo4j_test/data:/data neo4j 不工作 docker run--publish=7474:7474--volume=C:/Users/USERNAME/neo4j_test/data:/data neoj docker run--publish=7474:7474--volume=C:\Users\US

这两个docker运行命令之间的区别是什么?为什么一个运行而另一个不运行

工作命令

docker run--publish=7474:7474--volume=$HOME/neo4j_test/data:/data neo4j

不工作

docker run--publish=7474:7474--volume=C:/Users/USERNAME/neo4j_test/data:/data neoj

docker run--publish=7474:7474--volume=C:\Users\USERNAME\neo4j_test\data:/data neo4j

这些命令的错误

C:\Program Files\Docker Toolbox\Docker.exe:守护程序的错误响应:无效绑定装载规范“C:UserSuserNameeo4J\u testdata:/data”:无效模式:/data。 请参阅“C:\Program Files\Docker Toolbox\Docker.exe运行-帮助”

在非工作命令中,我只是将
$HOME
替换为我的用户配置文件文件夹
C:/Users/USERNAME

更新

我确实通过在Windows Powershell上执行
echo$HOME
检查了
$HOME
的值。实际上它是
C:\Users\USERNAME
。我也看了@Titouan Freville评论的文章。所以我用了命令

docker run--publish=7474:7474--volume=/c/Users/USERNAME/neo4j_test/data:/data neo4j

代替

docker run--publish=7474:7474--volume=C:/Users/USERNAME/neo4j_test/data:/data neoj


现在它正在工作。现在我只是想知道,
$HOME
C:\Users\USERNAME
/C/Users/USERNAME
的转换发生在哪里

来结束这个主题。这是解决方案;)


此外,windows上docker对$HOME的插值必须与它兼容,因此当您在docker命令中调用它时,它应该自己对其进行转换

对于仍有Docker For Windows问题的用户,以下是两种可行的解决方案:

为您的命令添加前缀 使用
MSYS\u NO\u PATHCONV=1

全文:
MSYS\u NO\u PATHCONV=1 docker run-v/c/path:/path

使用双斜杠
/
开头

全文:
docker run-v//c/path:/path



来源:

您能给我们提供错误消息吗?你应该有一个。如果它是一个未找到的文件,请确保$HOME==C:/Users/USERNAME。您还应该查看以下帖子:。这可能是一个答案。@TitouanFreville请参阅更新:)尝试
--volume=C:\/Users\/USERNAME/\neo4j\u test/\data:/data
我猜这就是Docker Machine解释路径的方式。他应该将其转换为与他兼容的类似linux的版本;)只是这个答案的补充说明。驱动器号应为小写。例如,如果在windows上使用git bash添加一个额外的斜杠,这将起作用,即:
-v/c/path:/path
-v//c/path:/path