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

Bash中如何让docker启动mkdocs服务就绪后再执行浏览器打开命令

解决方法

你可以通过「后台启动容器 + 轮询检测服务就绪状态 + 切回前台进程」的逻辑实现需求,适配你当前的bash 3.2环境,完整脚本如下:

#!/bin/bash
# 后台启动mkdocs容器,去掉-it参数避免后台运行时终端交互冲突
docker run --rm -p 8000:8000 -v "${PWD}:/docs" squidfunk/mkdocs-material &
# 保存容器进程PID,用于后续等待操作
DOCKER_PID=$!

# 轮询检测站点是否可用,最多等待30秒
for ((i=0; i<30; i++)); do
    # 检测8000端口是否可连通,macOS默认自带nc命令
    nc -z 127.0.0.1 8000 >/dev/null 2>&1
    if [ $? -eq 0 ]; then
        open http://localhost:8000
        break
    fi
    sleep 1
done

# 超时提示
if [ $i -eq 30 ]; then
    echo "服务启动超时,请检查容器是否正常运行"
    kill $DOCKER_PID
    exit 1
fi

# 将容器进程切回前台,可正常使用Ctrl+C停止服务
wait $DOCKER_PID

优化说明

如果需要更精准的检测(避免端口通了但站点还未完成初始化的情况),可以将端口检测逻辑替换为HTTP状态码校验:

# 替换原来的nc检测部分
for ((i=0; i<30; i++)); do
    # 检测站点是否返回200状态码
    curl -s -o /dev/null -w "%{http_code}" http://localhost:8000 | grep -q "200"
    if [ $? -eq 0 ]; then
        open http://localhost:8000
        break
    fi
    sleep 1
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 15:06:03