Docker daemon.json 日志配置无效

Joh*_*ell 4 linux ubuntu mongodb docker

我有一个 mongodb docker 容器(从 docker repo 下载的库存)。它的日志大小不受限制(/var/lib.docker/containers/'container_id'/'container_id'-json.log)

这最近导致服务器填满,所以我发现我可以指示 docker 守护进程限制容器日志文件的最大大小以及拆分后将保留的日志文件数。(请原谅天真。这是一个工具环境,因此可以将事情设置为满足即时需求,而缺乏计划通常是痛苦的)

停止容器是不可取的(尽管它不会带来世界末日),因此这样做可能是一个合适的计划 G。

通过实验,我发现运行同一个 docker 镜像的不同实例并包含--log-opt max-size=1m --log-opt max-file=3docker run命令中可以很好地完成我想要的。

我了解到我可以将它包含在 docker daemon.json 文件中,以便它可以在所有容器中全局工作。我尝试将以下内容添加到文件“/etc/docker/daemon.json”

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
Run Code Online (Sandbox Code Playgroud)

然后我向守护进程发送了一个 -SIGHUP。我确实观察到守护进程的日志吐出一些关于重新加载配置的信息,它提到了我进行编辑的确切文件路径。(注意:这个文件以前不存在。我创建了它并添加了内容。)这对正在运行的 Mongo 容器的日志输出没有影响。

重新加载守护程序后,我还尝试再次实例化Mongo 容器的不同实例,但它也没有观察到守护程序应具有的日志记录指令。我看到它的日志通过了 10m 标记并继续前进。

我的问题是:

  1. 是否应该通过守护程序更新日志记录以影响正在运行的容器?
  2. 如果没有,有没有办法告诉容器在仍在运行时重新加载此信息?(我明白了,docker update但这似乎不是可以更新的配置选项之一。
  3. 我的配置有问题吗?我测试了一个无意义的指令,看看错误是否会默默地失败,而他们没有。不在模式中的指令在守护进程的日志中引发了错误。这表明我添加的内容(如上所示)至少是预期的,但可能不完整或其他内容。这些命令似乎在运行命令中有效,但在配置中无效。此外,我最初尝试将“3”作为数字包含在内,这也引发了一个错误,当我对其进行字符串化时该错误消失了。
  4. 我确实在文件“/var/lib.docker/containers/'container_id'/hostconfig.json”中看到了 Mongo 容器的不同实例,其中我在其运行命令中包含了这些设置可见的指令。为 Mongo 容器的生产实例手动编辑此文件以匹配不同的概念验证容器配置是否有效/安全?

请参阅下面的一些系统详细信息:

  • Docker 版本 1.10.3,构建 20f81dd
  • Ubuntu 14.04.1 LTS

我的主要目标是了解为什么全局配置似乎不起作用,以及是否有办法对正在运行的容器进行此更改而不会中断它。

预先感谢您的帮助!

BMi*_*tch 5

此设置将是新创建的容器的新默认值,而不是现有容器,即使它们重新启动也是如此。新创建的容器将有一个新的容器 ID。我强调这一点是因为许多人(包括我自己)尝试更改现有容器上的日志设置,而没有先删除该容器(他们可能已经创建了一个宠物),并且在 docker 中没有支持的方法来做到这一点。

无需完全停止 docker 引擎,您只需运行重新加载命令即可应用此更改。但是,某些运行 docker 的方法,例如桌面环境和基于 Docker 的安装中的 Docker,在没有简单的重新加载选项时可能需要重新启动引擎。

此设置将 json 文件限制为 3 个单独的 10 兆文件,即 20-30 兆之间的日志,具体取决于第三个日志在文件中的位置。一旦你填满了第三个文件,最旧的日志就会被删除,让你回到 20 兆,在其他日志中执行轮换,并启动一个新的日志文件。但是 json 有很多开销,在我的测试中大约为 50%,这意味着您将获得大约 10-15 兆的应用程序输出。

请注意,此设置只是默认设置,任何容器都可以覆盖它。因此,如果您没有看到任何效果,请仔细检查容器是如何启动的,以验证那里没有传递任何日志选项。


小智 3

更改用于运行容器的 daemon.json 对我来说不起作用。编辑工作后重新加载守护进程并重新启动 docker /etc/docker/daemon.json,但仅限于新容器。

docker-compose down
sudo systemctl daemon-reload
sudo systemctl restart docker
docker-compose up -d
Run Code Online (Sandbox Code Playgroud)