你在哪里创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驱动程序将这些日志发送到syslog
, journald
, gelf
, fluentd
, awslogs
,json文件或任何提供awslogs
日志logging驱动程序的日志收集系统。
使应用程序写入stdout
而不是写入文件的技巧是将其configuration为写入特殊文件/proc/self/fd/1
。 任何写入这个特殊文件的东西都会被发送到stdout
。
从我的POV你应该考虑不创build任何日志文件,但使用(无缓冲)标准输出login集装箱环境。
请看这里为什么这是一个好主意http://12factor.net/logs
然后你可以使用“docker logs”获取这里描述的日志