And*_*kus 3 google-container-os
我在 Google 的 Container-Optimized OS (COS) 上运行了很长时间(并且冗长)的容器作业,最终生成了足够的日志来填充磁盘。
据我所知,在使用 COS 时没有办法旋转/限制日志文件大小。
检查正在运行的容器,它似乎将一个不断增长的文件写入/var/lib/docker/containers/(挂载在有状态分区上)并且HostConfig.LogConfig.Config是空的。
我最终不得不通过 SSH 登录并手动删除多 GB 的日志文件,以使 VM 再次运行。
我通读了https://cloud.google.com/compute/docs/containers/configuring-options-to-run-containers并且据我所知没有办法(比如说)--log-opt max-size=XX按照 Docker文档:https :
//docs.docker.com/config/containers/logging/json-file/
有没有办法通过那个标志?如果失败,是否有关于如何轮换日志/限制日志大小/避免遇到此问题的建议?
小智 14
您可以限制 中每个服务的日志文件大小docker-compose.yml。
只需添加这些行:
services:
app:
container_name: app
image: node
restart: always
volumes:
- ./app:/home/node/app
working_dir: /home/node/app
ports:
- 3000:3000
networks:
- main
command: "npm start"
logging:
driver: "json-file"
options:
max-file: "5" # number of files or file count
max-size: "10m" # file size
db:
...
logging:
driver: "json-file"
options:
max-file: "3" # number of files or file count
max-size: "10m" # file size
Run Code Online (Sandbox Code Playgroud)
小智 8
目前没有任何方法可以将该标志直接传递给您的容器。话虽如此,有一种解决方法可能对您有用。
它要求您在 /etc/docker/daemon.json 中全局设置标志,然后它将应用于该 VM 上启动的所有容器。您可以使用以下片段通过启动脚本执行此操作:
cat <<EOF > /etc/docker/daemon.json
{
"live-restore": true,
"storage-driver": "overlay2",
"log-opts": {
"max-size": "10m"
}
}
EOF
systemctl restart docker
Run Code Online (Sandbox Code Playgroud)
有关启动脚本的说明,请参阅https://cloud.google.com/compute/docs/startupscript#providing_startup_script_contents_directly。请参阅 docker 关于“log-opts”标志的文档:https : //docs.docker.com/config/containers/logging/json-file/#usage
默认情况下,docker 不会将容器日志配置为轮换或限制为最大大小。如果容器运行足够长的时间并生成足够的日志,日志文件可能会变得很大,以致填满磁盘空间。
有关可设置内容的更多信息,请参阅Docker 日志记录文档。
要为主机上的容器设置日志限制,可以使用 max-size 和 max-file 配置 --log-opt ,以便容器日志在达到最大限制时滚动,并且在被保存之前仅保存一定数量的文件被丢弃。
# cat /etc/sysconfig/docker
OPTIONS='--insecure-registry=172.30.0.0/16 --selinux-enabled --log-opt max size=50m --log-opt max-file=5'
Run Code Online (Sandbox Code Playgroud)
重新启动 docker 服务以使更改生效。
# systemctl restart docker
Run Code Online (Sandbox Code Playgroud)
如果主机上已经存在需要删除的日志文件,请运行以下命令来清除其内容并减小其大小。
# cat /dev/null > /var/lib/docker/containers/CONTAINER_ID/CONTAINER_ID-json.log
Run Code Online (Sandbox Code Playgroud)
或者
# cat /dev/null > $(docker inspect --format='{{.LogPath}}' CONTAINER_ID)
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
8541 次 |
| 最近记录: |