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

Bitbucket CI/CD流水线中如何正确执行curl并完成Docker容器测试

解决Bitbucket流水线Docker步骤卡住的问题

问题原因

你的docker run命令默认以前台模式运行容器,会占用当前脚本的执行进程,导致后续的echo、curl命令无法执行,流水线步骤一直处于“运行中”状态。

修改方案

方案1:后台启动容器,完成测试后清理容器

修改script部分代码,通过-d参数让容器后台运行,释放脚本进程,之后执行测试操作,最后停止并删除容器:

script:
        # 后台启动容器,记录容器ID
        - CONTAINER_ID=$(docker run -d -p 8080:8080 -e DVC_BEARER_TOKEN=$(gcloud auth print-access-token) -e MODEL_DIR="model_checkpoints/$MODEL_TYPE/$CUSTOMER/" $IMAGE)
        # 等待服务启动(可根据实际情况调整时长)
        - sleep 10
        - echo "RUN SUCCESSFULLY"
        - curl http://localhost:8080/
        # 测试完成后停止并删除容器
        - docker stop $CONTAINER_ID
        - docker rm $CONTAINER_ID

方案2:后台启动+自动删除容器

添加--rm参数,容器停止后会自动删除,省去手动删除步骤:

script:
        - CONTAINER_ID=$(docker run -d --rm -p 8080:8080 -e DVC_BEARER_TOKEN=$(gcloud auth print-access-token) -e MODEL_DIR="model_checkpoints/$MODEL_TYPE/$CUSTOMER/" $IMAGE)
        - sleep 10
        - echo "RUN SUCCESSFULLY"
        - curl http://localhost:8080/
        - docker stop $CONTAINER_ID

优化:智能等待服务启动

固定sleep时长可能不够可靠,可改用循环检查的方式,直到服务响应再执行后续操作:

script:
        - CONTAINER_ID=$(docker run -d --rm -p 8080:8080 -e DVC_BEARER_TOKEN=$(gcloud auth print-access-token) -e MODEL_DIR="model_checkpoints/$MODEL_TYPE/$CUSTOMER/" $IMAGE)
        # 循环curl直到服务响应,每次间隔2秒
        - until curl -s http://localhost:8080/; do sleep 2; done
        - echo "RUN SUCCESSFULLY"
        - curl http://localhost:8080/
        - docker stop $CONTAINER_ID

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 21:30:01