docker容器core占用空间太大
发现docker占用了很大的空间,进入容器后发现很多比较大的core加数字文件。
一、直接删除core文件
进入到/var/lib/docker/overlay2/**/merged,可以看到有很多core.文件。Core文件其实就是内存的映像,当程序崩溃时,存储内存的相应信息,主用用于对程序进行调试。
进入到大文件内,删除core,具体如下:
查看使用情况
df -hl
进入容器后可以直接删除core文件
rm -if core.*
删除之后查看
df -hl
二、禁用核心转储,启动容器加参数,不产生core文件
--ulimit core=0
其他关闭core方法:
docker启动后,通过ulimit -a命令查看core文件未关闭
方法一:使用ulimit -c 0命令关闭
(这种方式本人用了感觉没有效果)
方法二:在docker启动命令参数中增加–ulimit core=0
例如:docker run -dit --name test --ulimit core=0 -v /dev/hugepages:/dev/hugepages --net=host --cpuset-cpus=“1,2,3” --memory=“12g” --privileged IMAGE ID值
除了core还有日志可能有大文件
- 删除大的 log 文件
sudo find /var/lib/docker/containers -name *.log
cat /dev/null > /var/lib/docker/containers/374aa0ba92b37d829012282ff15c1bb838d95dedb54589874c4285991be2d4aa/374aa0ba92b37d829012282ff15c1bb838d95dedb54589874c4285991be2d4aa-json.log
控制 log 容量的命令
运行时控制
- 启动容器时,我们可以通过参数来控制日志的文件个数和单个文件的大小
docker run -it --log-opt max-size=10m --log-opt max-file=3 redis
- 全局配置
创建或修改文件/etc/docker/daemon.json,并增加以下配置
{
“log-driver”:“json-file”,
“log-opts”:{
“max-size” :“50m”,“max-file”:“1”
}
}
随后重启 Docker 服务
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
容器时间和本机不一致。
对于基于 Debian 基础镜像,CentOS 基础镜像制作的 Docker 镜像,在运行 Docker 容器时,传递环境变量-e TZ=Asia/Shanghai进去,能修改 docker 容器时区。
-e TZ=Asia/Shanghai
当宿主机为 Linux 系统时,我们可以直接将宿主机上的/etc/timezone和/etc/localtime挂载到容器中,这样可以保持容器和宿主机时区和时间一致。
-v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro
如果容器里面运行的是Java程序,Java代码获取的时间还是会有8个小时的差别,主要原因是Java获取时间是从/etc/timezone里获取时区的。
解决方法:挂载主机的/etc/timezone到容器,
如果没有则新建echo “Asia/shanghai” > /etc/timezone或者是通过Jvm参数-Duser.timezone=GMT+08将时区信息传进Jvm里,Docker运行容器时添加启动参数:
-e JAVA_OPTS='-Duser.timezone=GMT+08'
最终使用以下参数组合使时间一致了
-e JAVA_OPTS='-Duser.timezone=GMT+08' -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro代码片
最终没有加环境变量-e TZ=Asia/Shanghai,使用了感觉没什么作用,还得增加/etc/timezone文件。