docker - docker 容器读取另一个容器日志
问题描述
我想创建一个 docker,它可以连续地从另一个容器“factorio”中读取日志、stdout 和 stderr。
我知道我应该把它作为一个卷来做,但我目前最好的选择是
sudo docker logs -f factorio &> /var/log/factorio/current.logs
我在屏幕上运行上述内容。我将它作为后台命令,但是当您退出终端时,它会退出该命令。Screen 允许它在自己的终端上运行。
它在后台运行并不断更新文件。我的 newapp 容器以卷的形式连接到此文件位置,每 5 秒拖尾一次以获取任何更新并根据这些更新发送通知。肯定有更好的方法来处理卷,但我不知道如何。
someapp docker 命令如下:
sudo docker run -d \
-p 34197:34197/udp \
-p 27015:27015/tcp \
-v /opt/factorio:/factorio \
--name factorio \
--restart=always \
dtandersen/factorio:0.17.16
日志文件是/opt/factorio/factorio-current.log
但不包括 stdout 或 stderr。docker logs 包含此信息
解决方案
因此,如何在 docker 上处理该问题的首选方法是使用volume。
因此,如本页所述,您的第一个目标是创建所述卷,请注意卷实际上只是某种命名的挂载点。
- 创建您的音量
docker volume create factorio_logs
- (可选步骤,但可能对以后有用):验证您的卷是否存在:
docker volume ls
- 将您的应用程序日志生成器链接到您的卷
docker run -d \
-p 34197:34197/udp \
-p 27015:27015/tcp \
# adapt the line below to wherever your application is configured to store logs
-v factorio_logs:/var/log/factorio \
--name factorio \
--restart=always \
dtandersen/factorio:0.17.16
注意: -v 是一个高级选项,可以根据给定的源挂载卷或绑定挂载
- 创建您的消费者容器并安装卷(这只是一个
tail -f
示例)
docker run -ti -v factorio_logs:/var/log/factorio alpine tail -f /var/log/factorio/*.log
请注意,体积会在容器的生命周期之外持续存在。您必须手动清除该卷并重新创建它以清除您的日志
docker volume rm factorio_logs
docker volume create factorio_logs
另请注意,使用docker-compose可以大大简化多个容器、卷等的编排
推荐阅读
- java - 如何将列表视图中我从 Firebase 实时数据库调用的数据移动到 android studio 中的另一个活动?
- arrays - 通过使用 Spring Boot 插入来自循环的所有数据来创建 JSON 数组
- angular - Angular Elements:如何将模板传递给组件?
- loops - 在无痛脚本中循环子属性
- android-studio - 编辑文本的样式
- c# - 从 IAsyncResult 函数 C# 检索响应并在 HttpWebRespo 调用中执行操作
- css - 如何让flex子元素对齐到中间?
- javascript - 如何在 Bootstrap Modal Popup 中获取和编辑/更新来自数据库的所有数据,即使我的 Fetch Data Table 是连接的?
- postgresql - Postgres 错误 | COPY 命令磁盘配额超出
- javascript - express.js 公用文件夹未被识别