我已经运行了一年的云构建服务,该服务将nextjs应用程序部署到云运行容器中。本周,在进行了一些提交之后,我无法成功部署更改,尽管我没有更改GCP上的任何内容。在云构建中,错误显示:
"Deploy": ERROR: (gcloud.run.services.update) Cloud Run error: The user-provided container failed to start and listen on the port defined provided by the PORT=3000 environment variable. Logs for this revision might contain more information.
在它下载这个图像之后
ERROR: build step 2 "gcr.io/google.com/cloudsdktool/cloud-sdk:slim" failed: step exited with non-zero status: 1
我在cloudbuild.yaml文件上的步骤是:
下载.env文件
构建容器镜像
将容器图像推送到gcr
将容器映像部署到Cloud Run Anthos
我甚至将超时时间增加到了900秒,因为这是我收到的第一个错误。这些步骤在过去已经成功地部署了应用程序,我只在cloudbuild.yaml 中更改了超时时间
我的dockerfile只有以下内容:
FROM node:14-alpine
WORKDIR /app
COPY . .
RUN npm install
RUN npm rebuild node-sass
RUN npm run build
EXPOSE 3000
CMD ["npm","start"]
这是GCP抛出的一个非常常见的错误。前几天我也遇到过同样的情况,这与港口本身无关。
在我的情况下,我碰巧忘记了在更改Dockerfile中的权限之前创建一个目录。
试着在";日志";在那里你通常可以找到关于病因的更好的信息。GCP日志
尝试在端口8080而不是3000 上运行此程序
问题很可能是您不允许Dockerfile在任何地方使用$PORT环境变量-自定义CMD指令以包含$PORT,这样您的容器就可以从Cloud Run环境中接受它,并在该端口上启动应用程序。这个想法是Cloud Run传递这个环境变量,并且您的容器必须接受它——否则容器将无法在Cloud Run上启动(文档中这样说(。