You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Docker Compose容器的修改保存为可复用新镜像?

最佳实现方案:复用配置好的Grafana环境

一、导出现有Grafana的核心配置

你需要从本地运行的Grafana容器中导出两类关键内容:

  • 数据源配置:
    • 进入运行中的Grafana容器:docker exec -it <grafana-container-name> /bin/bash
    • 若已通过自动配置方式添加数据源,可直接复制 /etc/grafana/provisioning/datasources/ 下的配置文件;手动添加的数据源可通过API导出:
      # 替换为你的Grafana账号密码和本地访问端口
      curl -X GET http://admin:admin@localhost:3000/api/datasources -o datasources.json
      
  • 仪表盘配置:
    • 在Grafana界面操作:进入目标仪表盘→右上角设置→「导出」→保存为JSON文件(勾选「导出为可移植JSON」,避免依赖本地ID)
    • 批量导出可使用API:
      # 需提前安装jq工具
      curl -X GET http://admin:admin@localhost:3000/api/search | jq '.[] | .uid' | xargs -I {} curl -X GET http://admin:admin@localhost:3000/api/dashboards/uid/{} -o dashboard-{}.json
      

二、编写自定义Grafana Dockerfile

基于官方镜像,将导出的配置预置到镜像中,示例如下:

FROM grafana/grafana:latest

# 复制数据源自动加载配置
COPY ./datasources/ /etc/grafana/provisioning/datasources/
# 复制仪表盘文件与自动加载配置
COPY ./dashboards/ /var/lib/grafana/dashboards/
COPY ./dashboards/provisioning.yaml /etc/grafana/provisioning/dashboards/

# 可选:预置插件,比如需要的可视化插件
# ENV GF_INSTALL_PLUGINS=grafana-piechart-panel

仪表盘自动加载配置(provisioning.yaml)

创建该文件让Grafana启动时自动导入仪表盘:

apiVersion: 1

providers:
  - name: 'Prometheus Dashboards'
    orgId: 1
    folder: ''
    type: file
    disableDeletion: false
    updateIntervalSeconds: 10
    allowUiUpdates: false
    options:
      path: /var/lib/grafana/dashboards

三、调整docker-compose.yml

替换原官方镜像为自定义构建的镜像,示例:

version: '3.8'
services:
  grafana:
    build: ./grafana  # 指定Dockerfile所在目录
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin  # 预置管理员密码
    depends_on:
      - prometheus

  prometheus:
    image: prom/prometheus:latest
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus/config.yml:/etc/prometheus/prometheus.yml

  cadvisor:
    image: gcr.io/cadvisor/cadvisor:latest
    ports:
      - "8080:8080"
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro

四、构建与验证

  1. 按如下目录结构整理文件:
    your-project/
    ├── docker-compose.yml
    ├── grafana/
    │   ├── Dockerfile
    │   ├── datasources/
    │   │   └── datasources.json
    │   └── dashboards/
    │       ├── provisioning.yaml
    │       └── dashboard-xxx.json
    └── prometheus/
        └── config.yml
    
  2. 构建自定义镜像:docker-compose build grafana
  3. 启动环境:docker-compose up -d
  4. 验证:访问http://localhost:3000,确认数据源和仪表盘已自动加载

关键注意事项

  • 数据源配置中,Prometheus地址需使用docker-compose服务名(如http://prometheus:9090),而非localhost,确保容器网络内可访问
  • 敏感信息(如密码)建议通过docker-compose环境变量或secret管理,避免硬编码到镜像中
  • 修改配置后,重新构建镜像即可更新环境

内容的提问来源于stack exchange,提问作者unsafe_where_true

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 20:22:53