【问题标题】:Google Cloud Build & Docker "Cloud Builder" - builds that previously worked now give 137 status codeGoogle Cloud Build & Docker \"Cloud Builder\" - 以前工作的构建现在提供 137 状态代码
【发布时间】: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


【解决方案1】:

我将从使用官方 Cloud Builders 图像开始:在所有三个步骤中将 name 属性设置为 dockeras explained here。旧的图像名称不再得到很好的支持。

然后不要忘记将第一步的第一个参数从 docker-compose 更改为 compose

【讨论】:

  • 这并没有解决手头的问题,但是一个很好的建议,谢谢
【解决方案2】:

经过反复试验,我发现最终被测试的容器由于缺少依赖项而失败。出于某种原因,Google Pub/Sub Python 库进行了静默升级/更改,并且突然需要一个名为 pytz 的库,该库未包含在他们的 setup.py/pyproject.toml 中,不知道这是怎么发生的……

无论如何,将pytz 直接添加到我的 requirements.txt 文件后,容器现在可以工作,并且管道运行。

【讨论】:

    猜你喜欢
    • 2018-03-13
    • 1970-01-01
    • 2021-02-10
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多