【问题标题】:Docker linux - can't cd into some directories with docker exec (ASP.NET Core)Docker linux - 无法使用 docker exec (ASP.NET Core) 进入某些目录
【发布时间】:2019-11-15 20:37:11
【问题描述】:

我正在尝试了解文件结构在 docker 容器中的工作原理,以及卷和挂载。

让我困惑的一件事是,当我 docker exec -it <container id> /bin/bash 进入容器时,我无法 cd 进入某些目录。

例如,如果我运行cd logs,我希望能够运行ls 来获取日志文件列表,但我在cd logs 命令之后得到No such file or directory

不过,我可以运行 cd wwwroot 并四处导航。

在下面的终端图像中,您可以在我执行后看到ls 的结果。

例如,我可以运行cat logs\2019-07-04.log.json 将文件内容打印到屏幕上。但是我还是不行cd logs

我也尝试了以下方法:

就像文件路径是一个“键”而不是一个正确的目录结构。

所以这似乎仅限于应用程序在运行时写入的directories,而在构建时加载的文件具有正确的文件结构。

这是否特定于 Linux 容器上的 .NET Core?为什么会这样?

【问题讨论】:

  • 分隔符错误? Linux 使用/ 文件夹分隔符。您上面列出的是文件名,而不是目录。文件名为logs\2019-07-05.log(阅读:log\... 是文件名的一部分,而不是目录)和NOT2019-07-05.log。在路径中使用硬编码 `` 而不是 Path.DirectorySeparatorCharPath.Combine 的常见错误
  • 分隔符保持原样,因为这是一个 .NET Core 应用程序。看起来我在路径上有一些工作要做。我假设在 linux 上运行 .NET 核心时路径分隔符之间存在某种转换,但可能没有。 stackoverflow.com/questions/38168391/…
  • 我对此表示怀疑。 Path.DirectorySeparatorChar 将根据您使用的操作系统而有所不同。您在某处正在对其进行硬编码,这就是您看到它的原因。当您使用常规文件/目录 API 时,它会正确读取,就像您使用 Path.Combine("logs", fileName) 一样,因为 Path.Combine 将使用操作系统特定的目录分隔符
  • 是的,我知道它在某些地方是卡编码的,并且日志记录特别来自 NLog 配置,我可以在生产环境中更改它。感谢您的 cmets,非常有帮助。
  • NLog issue tracker 上提交问题?

标签: linux docker asp.net-core


【解决方案1】:

那是因为没有名为 logs 的文件夹,您创建了名为 logs\2019-07-04.log.jsonlogs\2019-07-05.log.json 的文件以解决此问题:

首先新建一个文件夹mkdir logs

然后将文件移动到文件夹mv logs\\2019* logs/

为了只使用一个\,需要双\\。 那你应该可以ls了。

问候 ;)

【讨论】:

  • 我想我确实需要创建一个目录,但 Tseng 的 cmets 可能是这里的答案。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-04
  • 2018-06-17
  • 1970-01-01
  • 2020-10-01
  • 1970-01-01
相关资源
最近更新 更多