问题描述
我正在尝试使用以下命令在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
成功了。但是我仍然很感兴趣为什么初始命令不起作用。
解决方法
我仍然对初始命令为什么不起作用感兴趣。
可能是因为bash解释了传递给docker exec的参数。
- 在第一种情况下,共有3个,包括
"/tmp/scripts/script.sh"
,其/tmp
被重新解释为C:/Users/<windows-user>/AppData/Local/Temp/
- 在第二种情况下,只有一个
'bash -c "/tmp/scripts/script.sh"'
使用字符串引号('
),并按原样传递给docker exec
。
然后,在容器上下文中执行all命令,并且在该上下文中,/tmp/scripts/script.sh
是有效路径。