首页 > 解决方案 > 在 Docker 容器中运行的应用程序可以写入其容器的文件系统吗?

问题描述

我有一个 Python Tornado 服务器,我最近一直在尝试 Dockerize。我无法解决的唯一问题是日志记录。logging以前,服务器使用该模块将日志写入其目录中的文件。但是,当作为容器运行时,根本不会再写入日志,即使在容器的文件系统中也是如此。我尝试创建新文件,但这也不起作用。结论似乎是该应用程序无法修改其容器的文件系统,但这对我来说毫无意义。

我还阅读了有关卷和将容器目录绑定到主机目录的信息。我也试过了,但仍然没有创建或写入文件。

我知道我可能可以通过将服务器的日志重定向到stdout&stderr并使用 docker logging 来解决日志记录问题,但我想了解为什么容器的文件系统似乎是不可变的。

标签: dockerlogging

解决方案


容器的文件系统不是不可变的,但日志文件并没有被写入那里。他们不应该;如果是这样,当容器停止时,您会丢失日志。

您已经在使用 docker logging:“默认情况下,Docker 会捕获所有容器的标准输出(和标准错误),并使用 JSON 格式将它们写入文件”,并使用默认的json-file日志记录驱动程序

请参阅有关配置日志记录的 Docker 文档:https ://docs.docker.com/config/containers/logging/configure/

日志文件在主机上创建:

/var/lib/docker/containers/<container_id>/<container_id>-json.log

您通过以下方式跟踪主机的日志

docker logs -f <container_id>

推荐阅读