docker - 在 Docker 容器中运行的应用程序可以写入其容器的文件系统吗?
问题描述
我有一个 Python Tornado 服务器,我最近一直在尝试 Dockerize。我无法解决的唯一问题是日志记录。logging
以前,服务器使用该模块将日志写入其目录中的文件。但是,当作为容器运行时,根本不会再写入日志,即使在容器的文件系统中也是如此。我尝试创建新文件,但这也不起作用。结论似乎是该应用程序无法修改其容器的文件系统,但这对我来说毫无意义。
我还阅读了有关卷和将容器目录绑定到主机目录的信息。我也试过了,但仍然没有创建或写入文件。
我知道我可能可以通过将服务器的日志重定向到stdout
&stderr
并使用 docker logging 来解决日志记录问题,但我想了解为什么容器的文件系统似乎是不可变的。
解决方案
容器的文件系统不是不可变的,但日志文件并没有被写入那里。他们不应该;如果是这样,当容器停止时,您会丢失日志。
您已经在使用 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>
推荐阅读
- string - 如何将字符串大写?
- android - error.org.jsonException.“opening_hours”没有值
- mysql - 本月总和与之前的差异 [mysql]
- java - 如果该 URL 包含路径变量,是否有任何方法可以在 ServletRequest 中找出确切请求的 URL?
- php - 使用最后插入的 id 插入问题
- python - WebDriverWait 未能等待该 URL
- powershell - 设置 IIS 默认应用程序池队列长度 Powershell
- java - maven 以什么顺序运行复合命令给出的阶段?
- stata - 使用 outreg2 导出结果
- javascript - 网络工作者是否有某种加载事件?