fix: 修复 Dockerfile 中 chown 目录可能导致用户权限的问题;

refs #20
This commit is contained in:
sundapeng.sdp 2025-10-16 11:45:28 +08:00
parent 2a79935b7a
commit e8a543e1d1
13 changed files with 109 additions and 155 deletions

View File

@ -31,25 +31,26 @@ RUN mkdir -p /var/log/supervisor
ENV FTP_BASE_PATH=/private/argus/ftp ENV FTP_BASE_PATH=/private/argus/ftp
# 设置域名环境变量 # 设置域名环境变量
ENV DOMAIN=prom.ftp.argus.com ENV DOMAIN=ftp.metric.argus.com
# 设置FTP用户密码环境变量 # 设置FTP用户密码环境变量
ENV FTP_PASSWORD=ZGClab1234! ENV FTP_PASSWORD=ZGClab1234!
# 设置用户和组ID环境变量 # 设置用户和组ID环境变量
ARG FTP_UID=2133 ARG ARGUS_BUILD_UID=2133
ARG FTP_GID=2015 ARG ARGUS_BUILD_GID=2015
ENV FTP_UID=${FTP_UID}
ENV FTP_GID=${FTP_GID} ENV ARGUS_BUILD_UID=${ARGUS_BUILD_UID} \
ARGUS_BUILD_GID=${ARGUS_BUILD_GID}
# 创建FTP用户和目录结构 # 创建FTP用户和目录结构
RUN groupadd -g ${FTP_GID} ftpuser && \ RUN groupadd -g ${ARGUS_BUILD_GID} ftpuser && \
useradd -u ${FTP_UID} -g ${FTP_GID} -d ${FTP_BASE_PATH}/share -s /bin/bash ftpuser && \ useradd -u ${ARGUS_BUILD_UID} -g ${ARGUS_BUILD_GID} -d ${FTP_BASE_PATH}/share -s /bin/bash ftpuser && \
mkdir -p ${FTP_BASE_PATH}/share \ mkdir -p ${FTP_BASE_PATH}/share \
&& mkdir -p /private/argus/etc \ && mkdir -p /private/argus/etc \
&& mkdir -p /var/log/vsftpd \ && mkdir -p /var/log/vsftpd \
&& mkdir -p /var/run/vsftpd/empty \ && chown -R ftpuser:ftpuser ${FTP_BASE_PATH} \
&& chown -R ftpuser:ftpuser ${FTP_BASE_PATH} && mkdir -p /var/run/vsftpd/empty
# 创建vsftpd配置目录和用户列表文件 # 创建vsftpd配置目录和用户列表文件
RUN mkdir -p /etc/vsftpd && \ RUN mkdir -p /etc/vsftpd && \

View File

@ -32,6 +32,9 @@ IP=$(ifconfig eth0 | awk '/inet /{print $2}' || hostname -i)
echo "current IP: ${IP}" echo "current IP: ${IP}"
echo "${IP}" > /private/argus/etc/${DOMAIN} echo "${IP}" > /private/argus/etc/${DOMAIN}
chown ${ARGUS_BUILD_UID}:${ARGUS_BUILD_GID} /private/argus/etc/${DOMAIN}
chmod +x /private/argus/etc/${DOMAIN}
# 启动vsftpd # 启动vsftpd
echo "[INFO] Starting vsftpd..." echo "[INFO] Starting vsftpd..."
exec /usr/sbin/vsftpd /tmp/vsftpd.conf exec /usr/sbin/vsftpd /tmp/vsftpd.conf

View File

@ -17,30 +17,31 @@ RUN mkdir -p /var/log/supervisor
ENV GRAFANA_BASE_PATH=/private/argus/metric/grafana ENV GRAFANA_BASE_PATH=/private/argus/metric/grafana
# 设置用户和组ID环境变量 # 设置用户和组ID环境变量
ARG GRAFANA_UID=2133 ARG ARGUS_BUILD_UID=2133
ARG GRAFANA_GID=2015 ARG ARGUS_BUILD_GID=2015
ENV GRAFANA_UID=${GRAFANA_UID}
ENV GRAFANA_GID=${GRAFANA_GID} ENV ARGUS_BUILD_UID=${ARGUS_BUILD_UID} \
ARGUS_BUILD_GID=${ARGUS_BUILD_GID}
# 创建基本目录结构 # 创建基本目录结构
RUN mkdir -p /private/argus/etc \ RUN mkdir -p /private/argus/etc \
&& mkdir -p /private/argus/metric/grafana/data \ && mkdir -p ${GRAFANA_BASE_PATH}/data \
&& mkdir -p /private/argus/metric/grafana/logs \ && mkdir -p ${GRAFANA_BASE_PATH}/logs \
&& mkdir -p /private/argus/metric/grafana/plugins \ && mkdir -p ${GRAFANA_BASE_PATH}/plugins \
&& mkdir -p /private/argus/metric/grafana/provisioning/datasources \ && mkdir -p ${GRAFANA_BASE_PATH}/provisioning/datasources \
&& mkdir -p /private/argus/metric/grafana/provisioning/dashboards \ && mkdir -p ${GRAFANA_BASE_PATH}/provisioning/dashboards \
&& mkdir -p /private/argus/metric/grafana/data/sessions \ && mkdir -p ${GRAFANA_BASE_PATH}/data/sessions \
&& mkdir -p /private/argus/metric/grafana/data/dashboards \ && mkdir -p ${GRAFANA_BASE_PATH}/data/dashboards \
&& mkdir -p /private/argus/metric/grafana/config \ && mkdir -p ${GRAFANA_BASE_PATH}/config \
&& mkdir -p /etc/grafana \ && mkdir -p /etc/grafana \
&& mkdir -p /var/lib/grafana \ && mkdir -p /var/lib/grafana \
&& mkdir -p /var/log/grafana && mkdir -p /var/log/grafana
# 修改 Grafana 用户 UID/GID 并授权 # 修改 Grafana 用户 UID/GID 并授权
RUN deluser grafana && \ RUN deluser grafana && \
addgroup -g ${GRAFANA_GID} grafana && \ addgroup -g ${ARGUS_BUILD_GID} grafana && \
adduser -u ${GRAFANA_UID} -G grafana -s /bin/sh -D grafana && \ adduser -u ${ARGUS_BUILD_UID} -G grafana -s /bin/sh -D grafana && \
chown -R grafana:grafana /var/lib/grafana /etc/grafana /var/log/grafana /private/argus chown -R grafana:grafana /var/lib/grafana /etc/grafana /var/log/grafana ${GRAFANA_BASE_PATH}
# 复制配置文件到容器内临时位置 # 复制配置文件到容器内临时位置
COPY grafana.ini /tmp/grafana.ini COPY grafana.ini /tmp/grafana.ini

View File

@ -9,6 +9,7 @@ DOMAIN=grafana.metric.argus.com
IP=$(ifconfig | awk '/inet / && $2 != "127.0.0.1" {print $2; exit}') IP=$(ifconfig | awk '/inet / && $2 != "127.0.0.1" {print $2; exit}')
echo "current IP: ${IP}" echo "current IP: ${IP}"
echo "${IP}" > /private/argus/etc/${DOMAIN} echo "${IP}" > /private/argus/etc/${DOMAIN}
chmod +x /private/argus/etc/${DOMAIN}
# 确保必要目录存在(权限已在 Dockerfile 中设置) # 确保必要目录存在(权限已在 Dockerfile 中设置)
mkdir -p /private/argus/metric/grafana/data mkdir -p /private/argus/metric/grafana/data
@ -27,7 +28,6 @@ mkdir -p /var/lib/grafana
if [ -f "/tmp/grafana.ini" ]; then if [ -f "/tmp/grafana.ini" ]; then
echo "[INFO] Copying grafana.ini to /private/argus/metric/grafana/config/" echo "[INFO] Copying grafana.ini to /private/argus/metric/grafana/config/"
cp /tmp/grafana.ini /private/argus/metric/grafana/config/grafana.ini cp /tmp/grafana.ini /private/argus/metric/grafana/config/grafana.ini
chown grafana:grafana /private/argus/metric/grafana/config/grafana.ini
echo "[INFO] Grafana configuration copied successfully" echo "[INFO] Grafana configuration copied successfully"
fi fi
@ -47,12 +47,9 @@ fi
if [ -f "/tmp/datasources.yml" ]; then if [ -f "/tmp/datasources.yml" ]; then
echo "[INFO] Copying datasource configuration to /private/argus/metric/grafana/provisioning/datasources/" echo "[INFO] Copying datasource configuration to /private/argus/metric/grafana/provisioning/datasources/"
cp /tmp/datasources.yml /private/argus/metric/grafana/provisioning/datasources/datasources.yml cp /tmp/datasources.yml /private/argus/metric/grafana/provisioning/datasources/datasources.yml
chown grafana:grafana /private/argus/metric/grafana/provisioning/datasources/datasources.yml
echo "[INFO] Datasource configuration copied successfully" echo "[INFO] Datasource configuration copied successfully"
elif [ -d "/private/argus/metric/grafana/provisioning/datasources" ] && [ "$(ls -A /private/argus/metric/grafana/provisioning/datasources)" ]; then elif [ -d "/private/argus/metric/grafana/provisioning/datasources" ] && [ "$(ls -A /private/argus/metric/grafana/provisioning/datasources)" ]; then
echo "[INFO] Found existing datasource provisioning files in /private/argus/metric/grafana/provisioning/datasources" echo "[INFO] Found existing datasource provisioning files in /private/argus/metric/grafana/provisioning/datasources"
# 确保数据源配置目录权限正确
chown -R grafana:grafana /private/argus/metric/grafana/provisioning/datasources
elif [ -d "/etc/grafana/provisioning/datasources" ] && [ "$(ls -A /etc/grafana/provisioning/datasources)" ]; then elif [ -d "/etc/grafana/provisioning/datasources" ] && [ "$(ls -A /etc/grafana/provisioning/datasources)" ]; then
echo "[INFO] Found datasource provisioning files in /etc/grafana/provisioning/datasources" echo "[INFO] Found datasource provisioning files in /etc/grafana/provisioning/datasources"
# 确保数据源配置目录权限正确 # 确保数据源配置目录权限正确
@ -65,7 +62,6 @@ fi
if [ -f "/tmp/dashboards.yml" ]; then if [ -f "/tmp/dashboards.yml" ]; then
echo "[INFO] Copying dashboard configuration to /private/argus/metric/grafana/provisioning/dashboards/" echo "[INFO] Copying dashboard configuration to /private/argus/metric/grafana/provisioning/dashboards/"
cp /tmp/dashboards.yml /private/argus/metric/grafana/provisioning/dashboards/dashboards.yml cp /tmp/dashboards.yml /private/argus/metric/grafana/provisioning/dashboards/dashboards.yml
chown grafana:grafana /private/argus/metric/grafana/provisioning/dashboards/dashboards.yml
echo "[INFO] Dashboard configuration copied successfully" echo "[INFO] Dashboard configuration copied successfully"
fi fi
@ -73,13 +69,9 @@ fi
if [ -f "/tmp/default_dashboard.json" ]; then if [ -f "/tmp/default_dashboard.json" ]; then
echo "[INFO] Copying default dashboard to /private/argus/metric/grafana/provisioning/dashboards/" echo "[INFO] Copying default dashboard to /private/argus/metric/grafana/provisioning/dashboards/"
cp /tmp/default_dashboard.json /private/argus/metric/grafana/provisioning/dashboards/default_dashboard.json cp /tmp/default_dashboard.json /private/argus/metric/grafana/provisioning/dashboards/default_dashboard.json
chown grafana:grafana /private/argus/metric/grafana/provisioning/dashboards/default_dashboard.json
echo "[INFO] Default dashboard copied successfully" echo "[INFO] Default dashboard copied successfully"
fi fi
# 确保所有配置目录权限正确
chown -R grafana:grafana /private/argus/metric/grafana/provisioning/
# 启动 Grafana # 启动 Grafana
if [ -n "$CONFIG_FILE" ]; then if [ -n "$CONFIG_FILE" ]; then
echo "[INFO] Starting Grafana with custom configuration..." echo "[INFO] Starting Grafana with custom configuration..."

View File

@ -48,11 +48,11 @@ RUN mkdir -p /var/log/supervisor
ENV PROMETHEUS_BASE_PATH=/private/argus/metric/prometheus ENV PROMETHEUS_BASE_PATH=/private/argus/metric/prometheus
# 设置用户和组ID环境变量 # 设置用户和组ID环境变量
ARG PROMETHEUS_UID=2133 ARG ARGUS_BUILD_UID=2133
ARG PROMETHEUS_GID=2015 ARG ARGUS_BUILD_GID=2015
ENV PROMETHEUS_UID=${PROMETHEUS_UID}
ENV PROMETHEUS_GID=${PROMETHEUS_GID}
ENV ARGUS_BUILD_UID=${ARGUS_BUILD_UID} \
ARGUS_BUILD_GID=${ARGUS_BUILD_GID}
# 创建目录结构 # 创建目录结构
RUN mkdir -p ${PROMETHEUS_BASE_PATH}/rules \ RUN mkdir -p ${PROMETHEUS_BASE_PATH}/rules \
&& mkdir -p ${PROMETHEUS_BASE_PATH}/targets \ && mkdir -p ${PROMETHEUS_BASE_PATH}/targets \
@ -61,11 +61,11 @@ RUN mkdir -p ${PROMETHEUS_BASE_PATH}/rules \
&& ln -s ${PROMETHEUS_BASE_PATH} /prometheus && ln -s ${PROMETHEUS_BASE_PATH} /prometheus
# 修改 Prometheus 用户 UID/GID 并授权 # 修改 Prometheus 用户 UID/GID 并授权
RUN usermod -u ${PROMETHEUS_UID} nobody && \ RUN usermod -u ${ARGUS_BUILD_UID} nobody && \
groupmod -g ${PROMETHEUS_GID} nogroup && \ groupmod -g ${ARGUS_BUILD_GID} nogroup && \
chown -h nobody:nogroup /prometheus && \ chown -h nobody:nogroup /prometheus && \
chown -R nobody:nogroup /private/argus/metric /etc/prometheus && \ chown -R nobody:nogroup ${PROMETHEUS_BASE_PATH} && \
chown -R nobody:nogroup ${PROMETHEUS_BASE_PATH} chown -R nobody:nogroup /etc/prometheus
# supervisor 配置 # supervisor 配置
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf

View File

@ -7,7 +7,7 @@ global:
alerting: alerting:
alertmanagers: alertmanagers:
- static_configs: - static_configs:
- targets: [] - targets: ["alertmanager.alert.argus.com:9093"]
# 规则目录 # 规则目录
rule_files: rule_files:

View File

@ -17,6 +17,7 @@ sed "s|\${PROMETHEUS_BASE_PATH}|${PROMETHEUS_BASE_PATH}|g" \
IP=$(ifconfig eth0 | awk '/inet /{print $2}') IP=$(ifconfig eth0 | awk '/inet /{print $2}')
echo "current IP: ${IP}" echo "current IP: ${IP}"
echo "${IP}" > /private/argus/etc/${DOMAIN} echo "${IP}" > /private/argus/etc/${DOMAIN}
chmod +x /private/argus/etc/${DOMAIN}
exec /bin/prometheus \ exec /bin/prometheus \
--config.file=${PROMETHEUS_BASE_PATH}/prometheus.yml \ --config.file=${PROMETHEUS_BASE_PATH}/prometheus.yml \

View File

@ -9,8 +9,9 @@ services:
context: ../ftp/build context: ../ftp/build
dockerfile: Dockerfile dockerfile: Dockerfile
args: args:
FTP_UID: ${FTP_UID:-2133} ARGUS_BUILD_UID: ${ARGUS_BUILD_UID:-2133}
FTP_GID: ${FTP_GID:-2015} ARGUS_BUILD_GID: ${ARGUS_BUILD_GID:-2015}
USE_INTRANET: ${USE_INTRANET:-false}
image: argus-metric-ftp:latest image: argus-metric-ftp:latest
container_name: argus-ftp container_name: argus-ftp
restart: unless-stopped restart: unless-stopped
@ -18,9 +19,9 @@ services:
- TZ=Asia/Shanghai - TZ=Asia/Shanghai
- FTP_BASE_PATH=/private/argus/ftp - FTP_BASE_PATH=/private/argus/ftp
- FTP_PASSWORD=${FTP_PASSWORD:-ZGClab1234!} - FTP_PASSWORD=${FTP_PASSWORD:-ZGClab1234!}
- DOMAIN=${FTP_DOMAIN:-prom.ftp.argus.com} - DOMAIN=${FTP_DOMAIN:-ftp.metric.argus.com}
- FTP_UID=${FTP_UID:-2133} - ARGUS_BUILD_UID=${ARGUS_BUILD_UID:-2133}
- FTP_GID=${FTP_GID:-2015} - ARGUS_BUILD_GID=${ARGUS_BUILD_GID:-2015}
ports: ports:
- "${FTP_PORT:-21}:21" - "${FTP_PORT:-21}:21"
- "${FTP_DATA_PORT:-20}:20" - "${FTP_DATA_PORT:-20}:20"
@ -44,8 +45,8 @@ services:
context: ../prometheus/build context: ../prometheus/build
dockerfile: Dockerfile dockerfile: Dockerfile
args: args:
PROMETHEUS_UID: ${PROMETHEUS_UID:-2133} ARGUS_BUILD_UID: ${ARGUS_BUILD_UID:-2133}
PROMETHEUS_GID: ${PROMETHEUS_GID:-2015} ARGUS_BUILD_GID: ${ARGUS_BUILD_GID:-2015}
USE_INTRANET: ${USE_INTRANET:-false} USE_INTRANET: ${USE_INTRANET:-false}
image: argus-metric-prometheus:latest image: argus-metric-prometheus:latest
container_name: argus-prometheus container_name: argus-prometheus
@ -53,8 +54,8 @@ services:
environment: environment:
- TZ=Asia/Shanghai - TZ=Asia/Shanghai
- PROMETHEUS_BASE_PATH=/private/argus/metric/prometheus - PROMETHEUS_BASE_PATH=/private/argus/metric/prometheus
- PROMETHEUS_UID=${PROMETHEUS_UID:-2133} - ARGUS_BUILD_UID=${ARGUS_BUILD_UID:-2133}
- PROMETHEUS_GID=${PROMETHEUS_GID:-2015} - ARGUS_BUILD_GID=${ARGUS_BUILD_GID:-2015}
ports: ports:
- "${PROMETHEUS_PORT:-9090}:9090" - "${PROMETHEUS_PORT:-9090}:9090"
volumes: volumes:
@ -76,16 +77,16 @@ services:
context: ../grafana/build context: ../grafana/build
dockerfile: Dockerfile dockerfile: Dockerfile
args: args:
GRAFANA_UID: ${GRAFANA_UID:-2133} ARGUS_BUILD_UID: ${ARGUS_BUILD_UID:-2133}
GRAFANA_GID: ${GRAFANA_GID:-2015} ARGUS_BUILD_GID: ${ARGUS_BUILD_GID:-2015}
image: argus-metric-grafana:latest image: argus-metric-grafana:latest
container_name: argus-grafana container_name: argus-grafana
restart: unless-stopped restart: unless-stopped
environment: environment:
- TZ=Asia/Shanghai - TZ=Asia/Shanghai
- GRAFANA_BASE_PATH=/private/argus/metric/grafana - GRAFANA_BASE_PATH=/private/argus/metric/grafana
- GRAFANA_UID=${GRAFANA_UID:-2133} - ARGUS_BUILD_UID=${ARGUS_BUILD_UID:-2133}
- GRAFANA_GID=${GRAFANA_GID:-2015} - ARGUS_BUILD_GID=${ARGUS_BUILD_GID:-2015}
- GF_SERVER_HTTP_PORT=3000 - GF_SERVER_HTTP_PORT=3000
- GF_LOG_LEVEL=warn - GF_LOG_LEVEL=warn
- GF_LOG_MODE=console - GF_LOG_MODE=console

View File

@ -1,19 +1,15 @@
# 用户和组配置 # 统一用户和组配置
FTP_UID=2133 ARGUS_BUILD_UID=1048
FTP_GID=2015 ARGUS_BUILD_GID=1048
PROMETHEUS_UID=2133
PROMETHEUS_GID=2015
GRAFANA_UID=2133
GRAFANA_GID=2015
# 数据根目录 # 数据根目录
DATA_ROOT=/private/argus DATA_ROOT=/private
# FTP 配置 # FTP 配置
FTP_PORT=2122 FTP_PORT=21
FTP_DATA_PORT=2022 FTP_DATA_PORT=20
FTP_PASSWORD=ZGClab1234! FTP_PASSWORD=ZGClab1234!
FTP_DOMAIN=prom.ftp.argus.com FTP_DOMAIN=ftp.metric.argus.com
# Prometheus 配置 # Prometheus 配置
PROMETHEUS_PORT=9090 PROMETHEUS_PORT=9090

View File

@ -1,14 +1,12 @@
#!/bin/bash #!/bin/bash
set -e set -e
FTP_DOMAIN="${FTP_DOMAIN:-ftp.metric.argus.com}"
FTP_SERVER="${FTP_SERVER:-172.30.0.40}" FTP_SERVER="${FTP_SERVER:-172.30.0.40}"
FTP_USER="${FTP_USER:-ftpuser}" FTP_USER="${FTP_USER:-ftpuser}"
FTP_PASSWORD="${FTP_PASSWORD:-ZGClab1234!}" FTP_PASSWORD="${FTP_PASSWORD:-ZGClab1234!}"
FTP_PORT="${FTP_PORT:-21}" FTP_PORT="${FTP_PORT:-21}"
# 优先使用域名,如果域名不可用则使用 IP FTP_HOST="${FTP_SERVER}"
FTP_HOST="${FTP_DOMAIN:-$FTP_SERVER}"
echo "[03] 进入测试节点执行安装..." echo "[03] 进入测试节点执行安装..."
echo "[03] 使用 FTP 地址: ${FTP_HOST}:${FTP_PORT}" echo "[03] 使用 FTP 地址: ${FTP_HOST}:${FTP_PORT}"

View File

@ -1,7 +1,6 @@
#!/bin/bash #!/bin/bash
# 初始化目录脚本 # 初始化目录脚本
# 用于创建所有必要的数据目录并设置正确的权限
set -e set -e
@ -16,61 +15,47 @@ if [ -f .env ]; then
fi fi
# 默认配置 # 默认配置
FTP_UID=${FTP_UID:-2133} ARGUS_BUILD_UID=${ARGUS_BUILD_UID:-2133}
FTP_GID=${FTP_GID:-2015} ARGUS_BUILD_GID=${ARGUS_BUILD_GID:-2015}
PROMETHEUS_UID=${PROMETHEUS_UID:-2133}
PROMETHEUS_GID=${PROMETHEUS_GID:-2015}
GRAFANA_UID=${GRAFANA_UID:-2133}
GRAFANA_GID=${GRAFANA_GID:-2015}
DATA_ROOT=${DATA_ROOT:-/private} DATA_ROOT=${DATA_ROOT:-/private}
echo "开始初始化目录结构..." echo "开始初始化目录结构..."
echo "数据根目录: ${DATA_ROOT}" echo "数据根目录: ${DATA_ROOT}"
echo "" echo "统一 UID: ${ARGUS_BUILD_UID}"
echo "统一 GID: ${ARGUS_BUILD_GID}"
# 创建基础目录结构
echo "创建基础目录结构..."
sudo mkdir -p ${DATA_ROOT}/argus/metric
sudo mkdir -p ${DATA_ROOT}/argus/etc
sudo mkdir -p ${DATA_ROOT}/argus/agent
# 创建 FTP 目录 # 创建 FTP 目录
echo "创建 FTP 目录..." echo "创建 FTP 目录..."
sudo mkdir -p ${DATA_ROOT}/argus/metric/ftp/share sudo mkdir -p ${DATA_ROOT}/argus/metric/ftp/share
sudo chown -R ${FTP_UID}:${FTP_GID} ${DATA_ROOT}/argus/metric/ftp
sudo chmod -R 755 ${DATA_ROOT}/argus/metric/ftp
# 创建 Prometheus 目录 # 创建 Prometheus 目录
echo "创建 Prometheus 目录..." echo "创建 Prometheus 目录..."
sudo mkdir -p ${DATA_ROOT}/argus/metric/prometheus/{data,rules,targets} sudo mkdir -p ${DATA_ROOT}/argus/metric/prometheus/{data,rules,targets}
# 统一设置 Prometheus 目录权限
sudo chown -R ${PROMETHEUS_UID}:${PROMETHEUS_GID} ${DATA_ROOT}/argus/metric/prometheus
sudo chmod -R 755 ${DATA_ROOT}/argus/metric/prometheus
# 创建 Grafana 目录 # 创建 Grafana 目录
echo "创建 Grafana 目录..." echo "创建 Grafana 目录..."
sudo mkdir -p ${DATA_ROOT}/argus/metric/grafana/{data,logs,plugins,provisioning/datasources,provisioning/dashboards,data/sessions,data/dashboards,config} sudo mkdir -p ${DATA_ROOT}/argus/metric/grafana/{data,logs,plugins,provisioning/datasources,provisioning/dashboards,data/sessions,data/dashboards,config}
sudo chown -R ${GRAFANA_UID}:${GRAFANA_GID} ${DATA_ROOT}/argus/metric/grafana
sudo chmod -R 755 ${DATA_ROOT}/argus/metric/grafana
# 创建公共配置目录 # 统一设置所有目录权限
echo "创建公共配置目录..." echo "设置目录权限..."
sudo mkdir -p ${DATA_ROOT}/argus/etc sudo chown -R ${ARGUS_BUILD_UID}:${ARGUS_BUILD_GID} ${DATA_ROOT}/argus/metric
sudo chown -R ${FTP_UID}:${FTP_GID} ${DATA_ROOT}/argus/etc sudo chmod -R 755 ${DATA_ROOT}/argus/metric
sudo chmod -R 755 ${DATA_ROOT}/argus/etc
# 创建 Agent 目录
echo "创建 Agent 目录..."
sudo mkdir -p ${DATA_ROOT}/argus/agent
sudo chown -R ${FTP_UID}:${FTP_GID} ${DATA_ROOT}/argus/agent
sudo chmod -R 755 ${DATA_ROOT}/argus/agent
echo "目录初始化完成!" echo "目录初始化完成!"
echo "" echo ""
echo "目录结构:" echo "目录结构:"
echo " ${DATA_ROOT}/" echo " ${DATA_ROOT}/"
echo " ├── argus/" echo " ├── argus/ (UID:${ARGUS_BUILD_UID}, GID:${ARGUS_BUILD_GID})"
echo " │ ├── metric/" echo " │ ├── metric/"
echo " │ │ ├── ftp/ (UID:${FTP_UID}, GID:${FTP_GID})" echo " │ │ ├── ftp/"
echo " │ │ ├── prometheus/ (UID:${PROMETHEUS_UID}, GID:${PROMETHEUS_GID})" echo " │ │ ├── prometheus/"
echo " │ │ └── grafana/ (UID:${GRAFANA_UID}, GID:${GRAFANA_GID})" echo " │ │ └── grafana/"
echo " │ ├── etc/ (UID:${FTP_UID}, GID:${FTP_GID})"
echo " │ └── agent/ (UID:${FTP_UID}, GID:${FTP_GID})"
echo "" echo ""
echo "您现在可以运行 'docker-compose up -d' 来启动所有服务" echo "您现在可以运行 'docker-compose up -d' 来启动所有服务"

View File

@ -151,7 +151,7 @@ else
echo "部分镜像缺失,开始构建..." echo "部分镜像缺失,开始构建..."
echo "工作目录: $(pwd)" echo "工作目录: $(pwd)"
cd "$TEST_DIR" cd "$TEST_DIR"
docker compose build docker compose build --no-cache
# 询问是否保存镜像 # 询问是否保存镜像
echo "" echo ""

View File

@ -22,57 +22,38 @@ if [ ! -d "$INPUT_DIR" ]; then
exit 1 exit 1
fi fi
# 定义要加载的镜像文件和期望的镜像名称 # 查找所有tar文件并加载
declare -A IMAGES=(
["argus-ftp.tar"]="argus-metric-ftp:latest"
["argus-prometheus.tar"]="argus-metric-prometheus:latest"
["argus-grafana.tar"]="argus-metric-grafana:latest"
["test-node.tar"]="ubuntu:22.04"
)
# 加载镜像
total=0 total=0
success=0 success=0
skipped=0
failed=0 failed=0
for tar_file in "${!IMAGES[@]}"; do # 查找目录下所有.tar文件
tar_files=($(find "$INPUT_DIR" -name "*.tar" -type f 2>/dev/null | sort))
if [ ${#tar_files[@]} -eq 0 ]; then
echo "错误: 在目录 $INPUT_DIR 中未找到任何 .tar 文件"
exit 1
fi
echo "找到 ${#tar_files[@]} 个镜像文件:"
for tar_file in "${tar_files[@]}"; do
echo " - $(basename "$tar_file")"
done
echo ""
for tar_file in "${tar_files[@]}"; do
total=$((total + 1)) total=$((total + 1))
input_file="${INPUT_DIR}/${tar_file}" tar_filename=$(basename "$tar_file")
image_name="${IMAGES[$tar_file]}"
echo "[$total] 处理: $tar_file" echo "[$total] 处理: $tar_filename"
# 检查 tar 文件是否存在 # 强制加载,不检查镜像是否已存在
if [ ! -f "$input_file" ]; then echo " 加载镜像..."
echo " ✗ 文件不存在: $tar_file" if docker load -i "$tar_file"; then
failed=$((failed + 1)) echo " 加载成功: $tar_filename"
echo "" success=$((success + 1))
continue
fi
# 检查镜像是否已存在
if docker images --format "{{.Repository}}:{{.Tag}}" | grep -q "^${image_name}$"; then
echo " ⊙ 镜像已存在: $image_name (跳过)"
skipped=$((skipped + 1))
echo ""
continue
fi
# 加载镜像
echo " → 加载镜像..."
if docker load -i "$input_file"; then
# 验证加载后的镜像
if docker images --format "{{.Repository}}:{{.Tag}}" | grep -q "^${image_name}$"; then
echo " ✓ 加载成功: $image_name"
success=$((success + 1))
else
echo " ⚠ 加载完成,但镜像名称可能不匹配"
echo " 请检查: docker images | grep '${image_name%:*}'"
success=$((success + 1))
fi
else else
echo " 加载失败: $tar_file" echo " 加载失败: $tar_filename"
failed=$((failed + 1)) failed=$((failed + 1))
fi fi
echo "" echo ""
@ -85,13 +66,12 @@ echo ""
echo "统计:" echo "统计:"
echo " 总计: $total" echo " 总计: $total"
echo " 成功: $success" echo " 成功: $success"
echo " 跳过: $skipped"
echo " 失败: $failed" echo " 失败: $failed"
echo "" echo ""
# 显示当前镜像 # 显示当前所有镜像
echo "当前 Argus 相关镜像:" echo "当前所有镜像:"
docker images | grep -E "REPOSITORY|argus-metric" || echo "未找到 argus-metric 镜像" docker images
echo "" echo ""
if [ $failed -gt 0 ]; then if [ $failed -gt 0 ]; then
@ -100,10 +80,6 @@ if [ $failed -gt 0 ]; then
fi fi
if [ $success -gt 0 ]; then if [ $success -gt 0 ]; then
echo "✓ 镜像加载成功!" echo "镜像加载成功!"
echo ""
echo "下一步:"
echo " 运行: bash scripts/common/start-all.sh"
echo " 或者: docker-compose up -d"
fi fi