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

部署Cloud Run实例失败:启动TCP探测连续失败求助

排查Cloud Run启动TCP探针失败问题

针对你遇到的Default STARTUP TCP probe failed 1 time consecutively for container "placeholder-1" on port 8080错误,结合你的Dockerfile和部署配置,从以下几个方向逐一排查:

1. 修复Dockerfile中的冗余覆盖问题

你的Dockerfile在编译生成二进制文件后,执行了COPY . .指令,这会将构建上下文的所有文件重新复制到/app目录,大概率会覆盖刚编译好的my-project二进制,导致容器启动时找不到可执行文件。

调整后的Dockerfile(移除冗余步骤):

FROM golang:1.20-alpine

RUN mkdir /app

ADD . /app/

WORKDIR /app

RUN go mod tidy && go mod vendor

ENV ENVIRONMENT RELEASE
ENV PORT 8080

# 编译二进制到当前工作目录(/app)
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o my-project ./src/

EXPOSE 8080

CMD ["./my-project"]

2. 强制应用监听0.0.0.0地址

Cloud Run的启动探针是从容器外部发起请求,如果你的Go应用仅监听127.0.0.1:8080,外部将无法访问,直接导致探针失败。

检查Go代码的监听逻辑,确保绑定0.0.0.0:

// 示例代码
import (
    "fmt"
    "net/http"
    "os"
)

func main() {
    port := os.Getenv("PORT")
    if port == "" {
        port = "8080"
    }
    // 必须绑定0.0.0.0,允许外部访问
    err := http.ListenAndServe(fmt.Sprintf("0.0.0.0:%s", port), nil)
    if err != nil {
        panic(err)
    }
}

3. 本地验证容器可用性

先在本地构建并运行容器,确认容器本身能正常启动并对外提供服务:

# 构建镜像
docker build -t local-test .
# 启动容器映射端口
docker run -p 8080:8080 local-test
# 另开终端测试访问
curl http://localhost:8080

如果本地也无法访问,说明问题出在应用或Dockerfile,与Cloud Run环境无关。

4. 核对端口配置一致性

确认以下三处端口配置完全一致:

  • Dockerfile中ENV PORT 8080
  • Dockerfile中EXPOSE 8080
  • Cloud Run部署命令中的--port=8080

5. 查看容器启动日志

登录Cloud Run控制台,查看容器的启动日志(而非探针错误日志),里面会包含应用启动失败的具体原因,比如二进制文件缺失、权限不足、代码panic等,这些信息能直接定位核心问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:22:51