在 Azure 容器实例中运行 Linux 容器时出错:无法打开日志文件“/var/log/pods/.../<container name>_0.log”
Error when runnning Linux container in Azure Container Instances: failed to open log file "/var/log/pods/.../<container name>_0.log"
我 运行 在 Linux 容器中安装 .NET Core 应用程序。
容器 运行 在本地很好,但是当 运行 在 Azure 容器实例中时,它立即停止。
容器的日志文件如下所示(使用Get-AzContainerInstanceLog
检索):
failed to open log file "/var/log/pods/336d7870-5a8e-11e9-925e-000d3a0ddc4a/test-1_0.log":
open /var/log/pods/336d7870-5a8e-11e9-925e-000d3a0ddc4a/test-1_0.log: no such file or directory
编辑:
我以前从未遇到过提到的文件或 pods
路径 (/var/log/pods/336d7870-5a8e-11e9-925e-000d3a0ddc4a/test-1_0.log
),而且我不知道 OS and/or 的哪一部分Docker 需要它。
日志文件和路径不是我的应用程序 运行ning 在容器内使用的东西(它直接记录到控制台,并且如前所述 运行 在 Linux 我本地 Docker 上的容器,用于 Windows 安装)。
Google 说它可能与 Kubernetes 有关,但我没有使用 Kubernetes "actively"(即它可能被 Azure 容器实例在幕后使用,但它是这不是我作为 ACI 用户所知道的事情)。
抱歉,错误描述不清楚,我会尝试重新措辞。
问题是我试图将命令行参数传递给容器,这在 Azure 中不起作用。
我从使用命令行参数切换到环境变量,一切都像魔术一样工作。
所以对我来说,这个错误发生在容器启动失败的时候。
提供了更好的错误描述,隐藏在 Azure 门户的 tabs/blades 之一中。
就我而言,我之前安装了 tini
并将 Dockerfile 中的入口点设置为 /sbin/tini --
。这样做后,可以将 Dockerfile 的 CMD 设置为不带任何引号的基本字符串,例如 CMD java -jar myapp.jar
但是在 Azure 中,您必须将命令设置为字符串段数组:
在 YAML 中:command: ["java", "-jar", "myapp.jar"]
执行此操作后,上面的错误 ("failed to open log file") 消失了,我的容器成功启动了。
我 运行 在 Linux 容器中安装 .NET Core 应用程序。
容器 运行 在本地很好,但是当 运行 在 Azure 容器实例中时,它立即停止。
容器的日志文件如下所示(使用Get-AzContainerInstanceLog
检索):
failed to open log file "/var/log/pods/336d7870-5a8e-11e9-925e-000d3a0ddc4a/test-1_0.log":
open /var/log/pods/336d7870-5a8e-11e9-925e-000d3a0ddc4a/test-1_0.log: no such file or directory
编辑:
我以前从未遇到过提到的文件或 pods
路径 (/var/log/pods/336d7870-5a8e-11e9-925e-000d3a0ddc4a/test-1_0.log
),而且我不知道 OS and/or 的哪一部分Docker 需要它。
日志文件和路径不是我的应用程序 运行ning 在容器内使用的东西(它直接记录到控制台,并且如前所述 运行 在 Linux 我本地 Docker 上的容器,用于 Windows 安装)。
Google 说它可能与 Kubernetes 有关,但我没有使用 Kubernetes "actively"(即它可能被 Azure 容器实例在幕后使用,但它是这不是我作为 ACI 用户所知道的事情)。 抱歉,错误描述不清楚,我会尝试重新措辞。
问题是我试图将命令行参数传递给容器,这在 Azure 中不起作用。
我从使用命令行参数切换到环境变量,一切都像魔术一样工作。
所以对我来说,这个错误发生在容器启动失败的时候。
提供了更好的错误描述,隐藏在 Azure 门户的 tabs/blades 之一中。
就我而言,我之前安装了 tini
并将 Dockerfile 中的入口点设置为 /sbin/tini --
。这样做后,可以将 Dockerfile 的 CMD 设置为不带任何引号的基本字符串,例如 CMD java -jar myapp.jar
但是在 Azure 中,您必须将命令设置为字符串段数组:
在 YAML 中:command: ["java", "-jar", "myapp.jar"]
执行此操作后,上面的错误 ("failed to open log file") 消失了,我的容器成功启动了。