bash - 通过 “docker exec”执行bash脚本时,Docker在主机上查找脚本,但不在容器中查找脚本

标签 bash docker git-bash

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

    相关文章:

    docker - 带有标签的docker未标记图像(使用docker-compose)

    java - 0MQ ROUTER DEALER 范例在 Docker 容器中不起作用

    r - 如何在 R 中使用 system() 或 shell() 执行 git-bash 命令

    bash - bash中的递归脚本将照片转换为视频

    Bash 脚本 : `exit 0` fails to exit

    bash - 如何在等待用户输入时更改 Bash 脚本的输出?

    Git 别名 : how to pass current directory to shell command?

    linux - Bash 正在将自动文件创建合并到 1 个大文件中?

    playframework - 不要为每个 SBT 子项目发布 docker 镜像

    linux - 基于 Bash 的热重载实现