码头工人容器:没有根的删除缓存 - 其他选项?



我正在docker容器(swarm(中使用Impala/HDFS进行一些查询测试。为了比较查询(不同的比例因子(,我想删除缓存。通常这很容易通过

$ sync
$ echo 1 > /proc/sys/vm/drop_caches

但我在主机系统上没有管理员权限。有没有另一种方法可以从容器内部删除缓存?是否可以选择创建另一个大表并在此表上执行查询,以便其数据覆盖缓存?

你不能从conatiner内部执行此操作。容器中的根用户与实际根用户位于不同的命名空间中,只有后者有权访问/proc。

您可以尝试将主机 proc 文件系统中的卷装载到容器中。这似乎对我有用:

$ docker run -ti --rm -v /proc/sys/vm/drop_caches:/drop_caches alpine
/ # free
total       used       free     shared    buffers     cached
Mem:       2046644     808236    1238408        688       2248     118244
-/+ buffers/cache:     687744    1358900
Swap:      1048572      31448    1017124
/ # dd if=/dev/zero of=/dummy count=500 bs=1M
500+0 records in
500+0 records out
/ # free
total       used       free     shared    buffers     cached
Mem:       2046644    1333892     712752        688       2268     630268
-/+ buffers/cache:     701356    1345288
Swap:      1048572      31448    1017124
/ # echo 3 > drop_caches
/ # free
total       used       free     shared    buffers     cached
Mem:       2046644     790136    1256508        688        764     101552
-/+ buffers/cache:     687820    1358824
Swap:      1048572      31448    1017124
/ #

。但这是假设您控制容器的启动方式,这或多或少意味着您是管理员。

> 可以通过使用--privileged标志在特权模式下启动容器来实现。

最新更新