巧克力
文章11
标签27
分类13

文章归档

如何限制Docker容器日志文件的大小

如何限制Docker容器日志文件的大小

如何限制Docker镜像容器日志文件的大小

  1. 解决办法

    1. 在 docker-compose.yml 文件中的对应服务添加以下配置

      1
      2
      3
      4
      5
      logging:
      driver: "json-file" # 指定使用 json-file 日志驱动
      options:
      max-size: "100m" # 每个日志文件最大 100MB
      max-file: "5" # 最多保留 5 个日志文件
    2. 例:修改前

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      # 推荐使用最新的 Compose 文件格式,所以 'version' 字段可以省略
      # 但如果你坚持保留,确保它是字符串格式,例如 '3.8' 或 '3'
      version: '3.8'

      services:
      jenkins: # Docker Compose 内部的服务名称
      image: jenkins/jenkins:lts # 使用 Jenkins 官方 LTS 镜像
      container_name: jenkins-compose # 设置容器的实际名称,避免与已存在的容器冲突
      ports:
      - "8081:8080" # 将宿主机 8081 端口映射到容器的 8080 端口 (Jenkins Web UI)
      - "50000:50000" # 将宿主机 50000 端口映射到容器的 50000 端口 (Jenkins Agent)
      volumes:
      - /data/jenkins_home:/var/jenkins_home # Jenkins 持久化数据目录
      # 以下是你在容器内挂载的额外工具链,确保宿主机上的路径存在且正确
      - /root/.nvm/versions/node/v14.21.3:/data/node/v14.21.3
      # - /root/.nvm/versions/node/v16.17.1:/data/node/v14.21.3
      # - /root/.nvm/versions/node/v16.20.2:/data/node/v16.20.2
      - /usr/bin/python3:/data/python/python3
      - /root/.sdkman/candidates/java/8.0.442-tem:/data/java/8.0.442-tem
      - /root/.sdkman/candidates/maven/3.9.9:/data/maven/3.9.9
      environment:
      # 以下是 Jenkins 容器内部所需的环境变量
      - MAVEN_HOME=/data/maven/3.9.9
      - PATH=/opt/java/openjdk/bin:/data/maven/3.9.9/bin:/data/node/v14.21.3/bin:/data/python:/root/.nvm/versions/node/v14.21.3/bin:/root/.sdkman/candidates/maven/current/bin:/root/.sdkman/candidates/java/current/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
      - LANG=C.UTF-8
      - JENKINS_HOME=/var/jenkins_home
      - JENKINS_SLAVE_AGENT_PORT=50000
      - REF=/usr/share/jenkins/ref
      - JENKINS_VERSION=2.492.2
      - JENKINS_UC=https://updates.jenkins.io
      - JENKINS_UC_EXPERIMENTAL=https://updates.jenkins.io/experimental
      - JENKINS_INCREMENTALS_REPO_MIRROR=https://repo.jenkins-ci.org/incrementals
      - COPY_REFERENCE_FILE_LOG=/var/jenkins_home/copy_reference_file.log
      - JAVA_HOME=/opt/java/openjdk
      restart: "always" # 容器重启策略,确保是字符串 "always"
      user: jenkins # 指定容器以 jenkins 用户身份运行
      networks:
      - data_default # 容器连接到名为 data_default 的网络

      networks:
      data_default:
      external: true # 表明这是一个已经存在的外部网络
    3. 修改后

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      # 推荐使用最新的 Compose 文件格式,所以 'version' 字段可以省略
      # 但如果你坚持保留,确保它是字符串格式,例如 '3.8' 或 '3'
      version: '3.8'

      services:
      jenkins: # Docker Compose 内部的服务名称
      image: jenkins/jenkins:lts # 使用 Jenkins 官方 LTS 镜像
      container_name: jenkins-compose # 设置容器的实际名称,避免与已存在的容器冲突
      ports:
      - "8081:8080" # 将宿主机 8081 端口映射到容器的 8080 端口 (Jenkins Web UI)
      - "50000:50000" # 将宿主机 50000 端口映射到容器的 50000 端口 (Jenkins Agent)
      volumes:
      - /data/jenkins_home:/var/jenkins_home # Jenkins 持久化数据目录
      # 以下是你在容器内挂载的额外工具链,确保宿主机上的路径存在且正确
      - /root/.nvm/versions/node/v14.21.3:/data/node/v14.21.3
      # - /root/.nvm/versions/node/v16.17.1:/data/node/v14.21.3
      # - /root/.nvm/versions/node/v16.20.2:/data/node/v16.20.2
      - /usr/bin/python3:/data/python/python3
      - /root/.sdkman/candidates/java/8.0.442-tem:/data/java/8.0.442-tem
      - /root/.sdkman/candidates/maven/3.9.9:/data/maven/3.9.9
      environment:
      # 以下是 Jenkins 容器内部所需的环境变量
      - MAVEN_HOME=/data/maven/3.9.9
      - PATH=/opt/java/openjdk/bin:/data/maven/3.9.9/bin:/data/node/v14.21.3/bin:/data/python:/root/.nvm/versions/node/v14.21.3/bin:/root/.sdkman/candidates/maven/current/bin:/root/.sdkman/candidates/java/current/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
      - LANG=C.UTF-8
      - JENKINS_HOME=/var/jenkins_home
      - JENKINS_SLAVE_AGENT_PORT=50000
      - REF=/usr/share/jenkins/ref
      - JENKINS_VERSION=2.492.2
      - JENKINS_UC=https://updates.jenkins.io
      - JENKINS_UC_EXPERIMENTAL=https://updates.jenkins.io/experimental
      - JENKINS_INCREMENTALS_REPO_MIRROR=https://repo.jenkins-ci.org/incrementals
      - COPY_REFERENCE_FILE_LOG=/var/jenkins_home/copy_reference_file.log
      - JAVA_HOME=/opt/java/openjdk
      restart: "always" # 容器重启策略,确保是字符串 "always"
      user: jenkins # 指定容器以 jenkins 用户身份运行
      networks:
      - data_default # 容器连接到名为 data_default 的网络
      # ====== 以下是新增的日志限制配置 ======
      logging:
      driver: "json-file" # 指定使用 json-file 日志驱动
      options:
      max-size: "100m" # 每个日志文件最大 100MB
      max-file: "5" # 最多保留 5 个日志文件
      # ======================================

      networks:
      data_default:
      external: true # 表明这是一个已经存在的外部网络
  2. 手动新增日志并验证

    1. 修改配置文件

      在 compose 文件中添加以下内容:

      1
      command: sh -c "while true; do echo 'This is a test log entry at $(date)'; sleep 0.1; done"

      把日志大小改为100k,方便查看

      1
      max-size: "100k"

      alt text

    2. 强制重建容器以应用参数

      1
      docker compose up -d --force-recreate
    3. 进入容器映射目录,监控日志大小

      1. 查找容器id

        1
        docker ps -a --no-trunc -f name=jenkins-compose

        结果:
        alt text

      2. 进入容器映射目录

        1
        cd /var/lib/docker/containers/<你的容器id>

        alt text

      3. 监控日志大小

        1
        watch -n 1 'ls -lh'

        alt text
        看到日志在涨就是成功了

    4. 记得还原compose 文件配置