【发布时间】:2022-09-20 06:50:51
【问题描述】:
在过去 2 个月左右的时间里,我一直在使用 docker-compose 在 Google Cloud Build 中运行一些构建管道,没有任何问题。
该管道使用 Docker Compose 设置集成测试环境,并使用 docker exec 命令在主容器 (container-dev) 上运行适用的单元和集成测试。
这是 Cloud Build 文件的 sn-p:
- id: \"Set Up Testing Instances (Docker Compose)\"
name: docker
env:
- \'DISCORD_TOKEN=automated_test\'
- \'DOCKER_NETWORK=cloudbuild\'
args: [\"compose\", \"up\", \"-d\", \"--build\"]
- id: \"Run Unit & Integration Tests\"
name: docker
args: [\"exec\", \"container-dev\", \"python\", \"-m\", \"coverage\", \"run\", \"-m\", \"pytest\"]
- id: \"Show Test Coverage\"
name: docker
args: [\"exec\", \"container-dev\", \"python\", \"-m\", \"coverage\", \"report\"]
- id: \"Build Test Docker Container\"
name: docker
entrypoint: /bin/bash
args: [\"build\", \".\", \"--target\", \"live\", \"-t\", \"us-east1-docker.pkg.dev/$PROJECT_ID/my-registry/mycontainer:test\"]
几个月来,这种配置对我来说一直运行良好。然而,突然在 9 月 13 日,当我尝试运行这些管道时(甚至重试以前成功的),我遇到了一个问题,即第 2 步,单元和集成测试在没有详细推理的情况下失败,只给了我状态码 137。我得到的日志如下:
Starting Step #1 - \"Run Unit & Integration Tests\"
Step #1 - \"Run Unit & Integration Tests\": Already have image (with digest): gcr.io/cloud-builders/docker
Finished Step #1 - \"Run Unit & Integration Tests\"
ERROR
ERROR: build step 1 \"gcr.io/cloud-builders/docker\" failed: step exited with non-zero status: 137
我知道如果运行容器的机器内存不足或已被另一个进程终止,则会出现状态代码 137。 最令人费解的方面是以前成功的管道现在如何在重试时失败。
除非最近 Cloud Build 中使用的底层机器发生了变化,否则我认为内存可用性不是问题。我尝试在独立容器(没有 docker compose)中仅运行单元测试,内存使用量显着减少,结果完全相同。共同点是图像gcr.io/cloud-builders/docker。
我的问题是:最近对 Cloud Build 所做的更改是否会影响到这一点?为什么现在才出现这种情况?
编辑: 我尝试了更多的东西,比如从 Google 更新所有 Docker 镜像,并更新了上面的 YAML 以反映这一点。 137 消息现在又回来了。之前似乎 docker compose 步骤过早终止,这导致错误代码 1(容器不可用)。
现在,由于我通过升级图像解决了这个问题,137 错误又回来了,即使我从我的 repo 的主分支运行,它之前在 9 月 13 日之前成功。我也运行了管道,因为有更多的内存/CPU,但这仍然达到了相同的结果,来自 docker 的 137 错误代码。
至于日志,我上面发布的内容与我得到的内容几乎相同。我将在这里添加几行以获得更多上下文。管道的第 0 步是在运行时在cloudbuild 网络上设置容器,以便容器可以相互访问。
第 1 步是运行 Docker 映像,尝试在容器上运行 exec 命令以运行其单元测试,这就是它失败的地方,显示 137,它说它已经有了 docker 映像,然后只是在没有任何日志的情况下切断,所以我不知道该容器内发生了什么。
Step #0 - \"Set Up Testing Instances (Docker Compose)\":
Step #0 - \"Set Up Testing Instances (Docker Compose)\": #26 [container-dev] exporting to image
Step #0 - \"Set Up Testing Instances (Docker Compose)\": #26 exporting layers
Step #0 - \"Set Up Testing Instances (Docker Compose)\": #26 exporting layers 1.6s done
Step #0 - \"Set Up Testing Instances (Docker Compose)\": #26 writing image sha256:9ae549b1894c5ffcfadde428bd790fc26201a3a5b56b9d199adfac67b58ce669 done
Step #0 - \"Set Up Testing Instances (Docker Compose)\": #26 naming to docker.io/library/container-dev done
Step #0 - \"Set Up Testing Instances (Docker Compose)\": #26 DONE 2.8s
Step #0 - \"Set Up Testing Instances (Docker Compose)\": Container cloud-storage Creating
Step #0 - \"Set Up Testing Instances (Docker Compose)\": Container firestore Creating
Step #0 - \"Set Up Testing Instances (Docker Compose)\": Container pubsub Creating
Step #0 - \"Set Up Testing Instances (Docker Compose)\": Container cloud-storage Created
Step #0 - \"Set Up Testing Instances (Docker Compose)\": Container firestore Created
Step #0 - \"Set Up Testing Instances (Docker Compose)\": Container pubsub Created
Step #0 - \"Set Up Testing Instances (Docker Compose)\": Container data-prep Creating
Step #0 - \"Set Up Testing Instances (Docker Compose)\": Container data-prep Created
Step #0 - \"Set Up Testing Instances (Docker Compose)\": Container container-dev Creating
Step #0 - \"Set Up Testing Instances (Docker Compose)\": Container container-dev Created
Step #0 - \"Set Up Testing Instances (Docker Compose)\": Container cloud-storage Starting
Step #0 - \"Set Up Testing Instances (Docker Compose)\": Container firestore Starting
Step #0 - \"Set Up Testing Instances (Docker Compose)\": Container pubsub Starting
Step #0 - \"Set Up Testing Instances (Docker Compose)\": Container firestore Started
Step #0 - \"Set Up Testing Instances (Docker Compose)\": Container cloud-storage Started
Step #0 - \"Set Up Testing Instances (Docker Compose)\": Container pubsub Started
Step #0 - \"Set Up Testing Instances (Docker Compose)\": Container data-prep Starting
Step #0 - \"Set Up Testing Instances (Docker Compose)\": Container data-prep Started
Step #0 - \"Set Up Testing Instances (Docker Compose)\": Container container-dev Starting
Step #0 - \"Set Up Testing Instances (Docker Compose)\": Container container-dev Started
Finished Step #0 - \"Set Up Testing Instances (Docker Compose)\"
Starting Step #1 - \"Run Unit & Integration Tests\"
Step #1 - \"Run Unit & Integration Tests\": Already have image: docker
Finished Step #1 - \"Run Unit & Integration Tests\"
ERROR
ERROR: build step 1 \"docker\" failed: step exited with non-zero status: 137
-
除了 137 之外,您是否检查过云构建日志中的其他错误?我的建议是 1)您可以尝试升级您当前的设置,如果错误仍然存在,2)您可以联系 Google Cloud Support 以针对您的问题提供适当的帮助和诊断。
-
可以分享一下日志吗?另外,请更新您使用的 Cloud Build 配置。
-
刚刚分享了更多日志。如果您希望 bust most 只是容器构建和 python pip install 日志,我可以通过文件分享更多信息,但老实说,它似乎并没有提供更多关于故障的信息。如果它提供更多上下文,我在 Docker Compose 中启动的容器使用专用的
cloudbuild网络,而不是生成它们自己的网络来相互交互。
标签: docker google-cloud-platform docker-compose google-cloud-build