【问题标题】:Using '*' in docker exec command在 docker exec 命令中使用“*”
【发布时间】:2018-11-17 11:12:37
【问题描述】:

我正在尝试在正在运行的 docker 容器中运行特定命令。

 Docker exec -t t1 ls /tmp/sth/*

作为回报,我收到了

 ls: cannot access '/tmp/sth/*': No such file or directory

事实上,当我在容器内执行命令时,一切正常。容器使用 Debian,本地机器使用 Windows。我试图找到它,但找不到。

【问题讨论】:

  • 这是正常/预期的行为。在 UNIX 世界中,在 shell 启动程序之前,glob 由你的 shell 扩展。因此,当调用ls 时,它期望已经传递/tmp/sth 中的文件列表,而不是通配符。在这种情况下,glob仅在容器内部有效,因此容器外部的shell无法看到扩展它的结果。

标签: linux windows docker containers system


【解决方案1】:

如果你想要一个 在容器内的 shell 来扩展你的 glob,你需要......好吧......实际上在容器内运行一个 shell。容器外的人看不到容器内的文件(当然),所以它传递 ls 文字模式,而不是你想要的目录中的文件列表。

因此:

docker exec -t t1 sh -c "ls /tmp/sth/*"

...请注意,我通常对命令使用单引号,但由于您的主机是 Windows,因此使用双引号,因为它们更有可能在 cmd.exe 中工作。

【讨论】:

  • 感谢您的回答。您提供的代码完全有效,并且您还提出了“为什么?”的问题。有什么总是好的;)
猜你喜欢
  • 2019-04-28
  • 1970-01-01
  • 2017-06-19
  • 2020-09-09
  • 2018-10-17
  • 2016-03-30
  • 2014-12-12
  • 2016-01-29
  • 1970-01-01
相关资源
最近更新 更多