【问题标题】:When executing bash script via "docker exec" Docker looks for script on host machine, but not in container通过“docker exec”执行 bash 脚本时,Docker 在主机上查找脚本,但不在容器中
【发布时间】:2021-01-04 00:17:44
【问题描述】:

我正在尝试使用以下命令在 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 git-bash


    【解决方案1】:

    我仍然对为什么初始命令不起作用感兴趣。

    可能是因为 bash 解释了传递给 docker exec 的参数。

    • 第一种情况有3个,包括"/tmp/scripts/script.sh",其/tmp被重新解释为C:/Users/&lt;windows-user&gt;/AppData/Local/Temp/
    • 在第二种情况下,只有一个'bash -c "/tmp/scripts/script.sh"',使用字符串引号('),并按原样传递给docker exec
      然后在容器上下文中执行 all 命令,在该上下文中,/tmp/scripts/script.sh 是有效路径。

    【讨论】:

    • 有没有办法影响这种解释?我认为这完全是因为 Windows 操作系统,因为所有示例和文档都建议使用第一种命令形式。一个基本上 PowerShell 可以运行它,那么是什么导致 Git Bash 中的不同命令解释..?
    • 尝试使用单引号:bash -c '/tmp/scripts/script.sh': 这应该避免 bash shell 重新解释。
    猜你喜欢
    • 2020-07-12
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    相关资源
    最近更新 更多