# Agent:配置和身份都放在同目录的 .data/(挂载到容器的 /etc/monitor)。 # # 第一次使用: # mkdir -p .data && sudo chown 1654:1654 .data # 容器以 UID/GID 1654 运行 # MONITOR_JOIN_TOKEN=<加入令牌> MONITOR_SERVER=https:// MONITOR_AGENT_NAME=<名字> \ # docker compose run --rm --entrypoint /usr/local/bin/fleet-enroll agent \ # --server "$MONITOR_SERVER" --join "$MONITOR_JOIN_TOKEN" --name "$MONITOR_AGENT_NAME" --identity-dir /etc/monitor/agent-id # 再在 .data/agent.json 里写(fleet.identity_dir 要和上面一致): # {"fleet":{"server":"https://","identity_dir":"/etc/monitor/agent-id"},"listen":{"bind":"0.0.0.0"},"limits":{"max_total_mbps":100,"max_total_pps":10000}} # sudo chown -R 1654:1654 .data # sudo podman compose up -d # Linux rootful Podman;也可用 docker compose # # 更新:改 MONITOR_VERSION(或 MONITOR_IMAGE),再 docker compose pull && docker compose up -d。 # 这种方式没有宿主机更新器:管理端的「更新」按钮对它不起作用;要自动更新请用 podman + systemd(docs/deployment.md「容器节点的运行」)。.data 不动,身份和历史都保留。 services: agent: image: ${MONITOR_IMAGE:-registry.oeo.one/monitor/monitor-agent}:${MONITOR_VERSION:-0.1.1} container_name: monitor-agent restart: unless-stopped init: true # Probe 要直连 Agent 的 7443(TCP+UDP)和 7444(TCP),用宿主网络,不做端口映射 network_mode: host volumes: - ./.data:/etc/monitor - /etc/os-release:/etc/os-release:ro # 系统目录只读,不加 :z/:Z;SELinux 隔离在容器级别禁用。 - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/host/root:ro environment: HOST_PROC: /host/proc HOST_SYS: /host/sys HOST_ROOT: /host/root read_only: true tmpfs: - /tmp:rw,noexec,nosuid,size=64m,mode=1777 security_opt: - label=disable - no-new-privileges:true cap_drop: - ALL # 要做 ICMP 测量时打开: # cap_add: # - NET_RAW stop_grace_period: 20s