你在哪里创build在Docker中运行的应用程序的日志?

你在哪里创buildDocker中运行的应用程序的日志,以便我可以稍后将它们映射到主机系统?

目前还不清楚我是否应该在没有root权限的情况下创build日志(然后是哪一个?),或者我可以chown我需要的目录。

我尝试使用/var/log/case/opt/case/logs没有成功。 这是我缩小的SBT脚本

 object build extends Build { lazy val root = Project( id = "case-server", base = file("."), settings = Defaults.coreDefaultSettings ++ graphSettings ++ Revolver.settings ++ Seq( version := "1.15", scalaVersion := "2.11.7", libraryDependencies ++= { val akkaV = "2.4.1" val akkaStreamV = "2.0.1" val scalaTestV = "2.2.5" Seq( "com.typesafe.scala-logging" %% "scala-logging-slf4j" % "2.1.2", "ch.qos.logback" % "logback-classic" % "1.1.+", "org.scalatest" %% "scalatest" % scalaTestV % "test" ) }, dockerBaseImage := "develar/java", dockerCommands := dockerCommands.value.flatMap { case cmd@Cmd("FROM", _) => List(cmd, Cmd("RUN", "apk update && apk add bash")) case other => List(other) }, dockerExposedVolumes := Seq("/opt/case/logs"), version in Docker := version.value ) ).enablePlugins(AssemblyPlugin).enablePlugins(JavaAppPackaging).enablePlugins(DockerPlugin) } 

什么是正确的做法呢?

您不希望将应用程序日志写入容器文件系统上的文件。 其他解决scheme是:

  • 将日志文件写入泊坞窗卷
  • 将日志条目写入stdout (以便将它们转发到Docker引擎并通过docker logs命令提供)

此外,如果您的应用程序正在将其日志条目写入stdout ,则可以依靠Docker日志logging驱动程序将这些日志发送到syslogjournaldgelffluentdawslogs ,json文件或任何提供awslogs日志logging驱动程序的日志收集系统。

使应用程序写入stdout而不是写入文件的技巧是将其configuration为写入特殊文件/proc/self/fd/1 。 任何写入这个特殊文件的东西都会被发送到stdout

从我的POV你应该考虑不创build任何日志文件,但使用(无缓冲)标准输出login集装箱环境。

请看这里为什么这是一个好主意http://12factor.net/logs

然后你可以使用“docker logs”获取这里描述的日志