我正在尝试使用以下命令在Docker容器内执行脚本:
docker exec <my-container> bash -c "/tmp/scripts/script.sh"
因此,我在Windows 10上使用Git Bash。不幸的是,这返回一个错误。bash: C:/Users/<windows-user>/AppData/Local/Temp/scripts/script.sh: No such file or directory
因此,我可以轻松得出结论,Git Bash尝试在主机Windows计算机上找到脚本,但不在容器内找到脚本(这是预期的行为)。同时,PowerShell按预期运行此命令-脚本在容器内执行。
这种行为可能是什么原因以及如何解决?
注意。我找到了一种解决方法:
commandtorun='bash -c "/tmp/scripts/script.sh"'
docker exec <my-container> $commandtorun
而且有效。但是我仍然很感兴趣为什么初始命令不起作用。
最佳答案
I still interested why the initial command not working.
可能是因为bash解释了传递给docker exec的参数。
"/tmp/scripts/script.sh"
在内有3种,其/tmp
被重新解释为C:/Users/<windows-user>/AppData/Local/Temp/
'bash -c "/tmp/scripts/script.sh"'
,使用字符串引号('
),并按原样传递给docker exec
。然后,在容器上下文中执行all命令,并且在该上下文中,
/tmp/scripts/script.sh
是有效路径。 关于bash - 通过 “docker exec”执行bash脚本时,Docker在主机上查找脚本,但不在容器中查找脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63932364/