我想创建一个docker连续读取另一个容器“ factorio”中的日志,stdout和stderr。
我知道我应该以卷的形式执行此操作,但是我目前最好的选择是
sudo docker logs -f factorio &> /var/log/factorio/current.logs
我在屏幕上运行以上内容。我将其作为后台命令使用,但是当您退出终端时,它将退出该命令。屏幕允许它在自己的终端上运行。
在后台运行并不断更新文件。我的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日志包含此信息
答案 0 :(得分:2)
使用共享卷。您不需要docker-compose。
您可以在official documentation中了解更多信息。
但是基本思想是创建一个卷,然后将该卷加载到两个容器中。 然后将所需的日志/文件存储在该卷中,您可以从其他容器中读取该文件。
如果您也想在容器外部访问它,也可以使用文件系统上的文件夹并将其作为卷挂载。
答案 1 :(得分:1)
因此,如何在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是一个高级选项,可以根据提供的源来安装volume或bind-mount
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 可以大大简化多种容器,卷等的编排>