fix: 修复容器检测 - 优先查找运行中容器再获取密码

This commit is contained in:
root
2026-04-08 23:02:47 +08:00
parent 3089623287
commit 25b8365cc7

View File

@ -69,30 +69,40 @@ else
# 如果 Docker 可用,使用 Docker 启动 Neo4j # 如果 Docker 可用,使用 Docker 启动 Neo4j
if command -v docker &> /dev/null; then if command -v docker &> /dev/null; then
# 检查是否有已存在的容器 # 优先查找正在运行的容器
EXISTING=$(docker ps -a --filter "name=neo4j" --format "{{.Names}}" | head -1) RUNNING=$(docker ps --filter "name=neo4j" --format "{{.Names}}" 2>/dev/null | head -1)
if [ -n "$EXISTING" ]; then STOPPED=$(docker ps -a --filter "name=neo4j" --format "{{.Names}}" 2>/dev/null | head -1)
echo " 找到已有 Neo4j 容器: $EXISTING"
docker start "$EXISTING" 2>/dev/null || true if [ -n "$RUNNING" ]; then
# 尝试从环境变量获取密码 echo " 找到运行中的 Neo4j 容器: $RUNNING"
NEO4J_AUTH=$(docker inspect "$EXISTING" --format '{{.Config.Env}}' 2>/dev/null | grep -o 'NEO4J_AUTH=[^ ]*' | cut -d'=' -f2) EXISTING="$RUNNING"
if [ -n "$NEO4J_AUTH" ]; then elif [ -n "$STOPPED" ]; then
NEO4J_PASSWORD=$(echo "$NEO4J_AUTH" | cut -d'/' -f2) echo " 找到已停止的 Neo4j 容器: $STOPPED"
fi docker start "$STOPPED" 2>/dev/null || true
sleep 3
EXISTING="$STOPPED"
else else
# 生成随机密码 # 没有已有容器,创建新的
NEO4J_PASS=$(openssl rand -hex 8 2>/dev/null || echo "openclaw$(date +%s)") NEO4J_PASS=$(openssl rand -hex 8 2>/dev/null || echo "openclaw$(date +%s)")
docker run -d --name openclaw-neo4j \ docker run -d --name openclaw-neo4j \
-p 7474:7474 -p 7687:7687 \ -p 7474:7474 -p 7687:7687 \
-e NEO4J_AUTH=neo4j/${NEO4J_PASS} \ -e NEO4J_AUTH=neo4j/${NEO4J_PASS} \
-e NEO4J_PLUGINS='["apoc"]' \ -e NEO4J_PLUGINS='["apoc"]' \
neo4j:5 || true neo4j:5 || true
sleep 15
echo " Neo4j Docker 容器已启动" echo " Neo4j Docker 容器已启动"
echo " 密码: $NEO4J_PASS" echo " 密码: $NEO4J_PASS"
NEO4J_PASSWORD="$NEO4J_PASS" NEO4J_PASSWORD="$NEO4J_PASS"
# 保存密码到文件
echo "$NEO4J_PASS" > "$PROJECT_DIR/.neo4j_pass" echo "$NEO4J_PASS" > "$PROJECT_DIR/.neo4j_pass"
EXISTING="openclaw-neo4j"
fi
# 获取密码
if [ -z "$NEO4J_PASSWORD" ]; then
NEO4J_AUTH=$(docker inspect "$EXISTING" --format '{{.Config.Env}}' 2>/dev/null | tr ' ' '\n' | grep NEO4J_AUTH | cut -d'=' -f2)
if [ -n "$NEO4J_AUTH" ]; then
NEO4J_PASSWORD=$(echo "$NEO4J_AUTH" | cut -d'/' -f2)
fi
fi fi
else else
echo " 无法安装 Neo4j,请手动安装或使用 Docker" echo " 无法安装 Neo4j,请手动安装或使用 Docker"