问题标签 [linuxkit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - Docker 守护进程日志占用过多磁盘空间
前言
澄清一下,这个问题是针对 docker 守护进程日志的,而不是针对 docker 的容器级日志的。log-driver 和 log-opts docker daemon 配置似乎可以很好地处理容器级日志。
描述
我们遇到的问题是 docker daemon log(位于/var/log/docker.err.log
)日志文件增长太快,并且没有在我们的docker swarm生产服务器上轮换。从长远来看,我们自然会担心磁盘空间。具体来说,我们已经运行了将近一个月,在一个节点上,该日志文件已经增长到 5.1GB。由于我们的虚拟机预计将连续运行数月,这显然是一个令人担忧的趋势。
我们使用的linuxkit操作系统与示例docker configuration 具有非常相似的配置,文件中有一些额外的配置/etc/docker/daemon.json
,最值得注意的是我们将 debug 设置为 True。这显然是一个错误,因为我们的测试表明,如果我们不使用该选项,我们的日志文件将大大缩小。
但是,即使我们将日志级别保留为默认的信息,在我看来,如果服务器运行时间过长,日志文件仍然可能导致问题。我的一位同事做了一些粗略的计算,他的猜测是,如果守护程序运行 6 个月左右,该文件仍可能增长到 10GB 左右。
我们尝试了什么
我们一直在尝试使用手动 logrotate 解决方案来防止这种情况,但似乎 docker 守护进程从不重新加载它的日志文件,这意味着当 logrotate 执行它并创建一个空白的新 docker.err.log 时, docker daemon 继续以它离开的任何偏移量写入,并用空字节回填文件的其余部分,占用与以前一样多的空间。我们尝试了一些解决方案,包括将 HUP 信号发送到 docker 进程,但没有成功;似乎 docker 守护进程没有处理该信号,或者至少没有以重新加载它的日志文件的方式。
问题
是否有一种可接受的方式来实现 docker 守护程序日志的轮换?
我们找不到任何有关此的信息似乎很不寻常,因为似乎某个地方之前有人遇到过这个问题。或者在 swarm 上运行的其他人是否会在某个时候定期重启服务器?理想情况下,我们希望找到一种基于 linuxkit 的方式来专门旋转该日志文件
此外,有没有办法在不关闭服务器或 docker 守护程序实例的情况下截断正在运行的服务器上的现有 docker.err.log?我们希望不惜一切代价避免为了防止 docker 守护进程日志耗尽我们所有的磁盘空间而不得不部署更新的操作系统映像。
重现步骤
- 使用带有调试的 docker 守护程序服务创建 linuxkit OS ISO:在其配置文件中为 True
- 使用该 ISO,运行 docker swarm 集群几天
- 观察 docker.err.log 文件的增长情况
Linuxkit 配置
docker - 允许通过 vpnkit 出站容器网络
我在这里有一个 linuxkit 构建的 VM,它带有一个service
我正在尝试运行的自定义容器。
使用 Alpine 的基本映像,该net-manager
服务的重点是允许公共 Internet 连接到我在host: net
命名空间上旋转的虚拟以太网适配器。我目前的尝试如下(在容器内):
就像您对未使用 vpnkit 的 VM 所做的那样,但这样做似乎没有任何明显的效果。例如,nc -v google.com
仍然失败。我错过了什么?vpnkit 已按照此处的示例进行安装和转发:
https://github.com/linuxkit/linuxkit/blob/master/examples/docker-for-mac.yml
docker - 如何做来自 GitHub:linuxkit/linuxkit 的 hello_world 示例?
情况和问题
我正在尝试按照本指南“如何使用 docker for mac 制作自己的 linuxkit”,您可以在其中添加一些通常不存在于 docker 映像中的内核模块。
经过大量阅读和测试后,我未能在存储库中执行最简单(人们会认为)的测试用例:
https://github.com/linuxkit/linuxkit/tree/master/test/cases/020_kernel/011_kmod_4.9.x
检查容器的 linux 内核版本和配置:
我回到github 历史中找到我本地 linuxkit 内核版本的哈希并修改了该示例的 dockerfile(或基本上使用旧的)。
到目前为止,一切都很好。问题是,如果我尝试做任何与内核模块(、、、、modinfo
)相关的事情modprobe
,我会得到如下错误:depmod
insmod
这是因为容器中根本不存在该路径(甚至没有模块文件夹)。如果我要检查 - 如上所述 - 只是在alpine:latest
. 因此,该 dockerfile 中似乎没有发生任何魔法。
问题
现在我完全感到困惑并束手无策,因此我的问题......
如何从 linuxkit/linuxkit 执行 hello_world 示例?
补充说明
linuxkit-repository 的文档没有提到这个问题: https ://github.com/linuxkit/linuxkit/blob/master/docs/kernels.md#compiling-external-kernel-modules
为了便于测试,我正在使用
docker-compose
/li>我什至欺骗它(通过手工插入)不显示任何错误,但也没有做我认为代码应该做的事情:
/li>
kernel - Linux 内核:如何使用 request_module() 和 try_module_get()
我正在努力了解如何以正确的方式使用
我发现了这篇有趣的帖子:如何检查代码以确保内核间模块依赖 - Linux Kernel?
但我错过了一点:我可以request_module
正常工作,但我不知道如何使用try_module_get
我解释:
如果我使用
ret = request_module("ipt_conntrack")
模块 xt_conntrack 已正确插入,但标记为未使用,因为根据上面的帖子,我没有使用try_module_get
.
但是我怎么能打电话try_module_get
呢?该函数需要一个struct module
参数,我不知道如何为 xt_conntrack 模块填充该参数。我找到了几个例子,但都与“THIS_MODULE”参数有关,在这种情况下不适用。你能指出我正确的方向吗?
谢谢你的帮助
docker - 无法从 Windows Server 2019 运行 testcontainer(已安装 LinuxKit)
无法在 Windows Server 2019(已安装 LinuxKit)中从 testcontainer 运行 linux 容器。如下所述得到错误。
Docker 信息如下:
PS:- 能够运行 linux 容器,而 docker cli 命令没有任何问题
linux - 如何在 tty 上运行程序?
上一个问题:<尚未解决> 如何在 tty 上运行程序?
我需要在 linuxkit 的启动时进行 tty 交互。
感谢“Mahdy Mirzade”的回复,
这工作得很好,但它不能控制 tty。
因此,无法运行通过 tty 接收用户输入的程序。有没有办法解决这个问题?
我不能修改程序本身,因为它不是我制作的。
docker-for-mac - 关于 linuxkit VM 的 Docker for Mac 网络问题
使用 Docker for Mac,我可以使用 socat 和 screen 进入 linuxkit VM。以下是 linuxkit VM 内路由的输出:
192.168.65.5 是 dns 服务器,192.168.65.1 是网关。这些IP在哪里?他们不在主机上。它们是否配置在运行在 linuxkit VM 内的 vpnkit-forwarder 和 dns-forwarder 容器中?我试图进入这些容器但失败了。