【问题标题】:Cloud Run Container Not Building Possibly Due to Package Issue?Cloud Run 容器可能由于包问题而无法构建?
【发布时间】:2021-10-23 13:44:00
【问题描述】:

我从 GCP 项目中的特定目录构建 Cloud Run 容器时遇到错误。这个特定目录在过去一直是正确构建的,并且自上次成功构建以来没有对其进行任何更改。

然而,最近,我想为这个目录启动一个管道,所以我在代码中添加了几个井号(因此 Cloud Build 触发器可以开始构建 Run 容器 - 此外,添加这些井号应该不影响代码中的任何内容)。在这个过程中,出现了这个错误:

E: Unable to locate package python3.7-dev
E: Couldn't find any package by glob 'python3.7-dev'
E: Couldn't find any package by regex 'python3.7-dev'
The command '/bin/sh -c apt-get update   && apt-get upgrade -y   && apt-get install -y wget 
unzip xvfb libxtst6 libxrender1 python3.7-dev build-essential net-tools' returned a non-zero 
code: 100

鉴于没有任何改变,我不确定是什么导致了这个错误。此错误消息可能意味着什么,我应该采取什么措施来修复它?任何帮助表示赞赏,如果需要更多信息,我很乐意更新问题。谢谢!

编辑:这些是 dockerfile 内容:

FROM python:3.7-slim

# Allow statements and log messages to immediately appear in the Cloud Run logs
ENV PYTHONUNBUFFERED True

# install dependencies
RUN  apt-get update \
  && apt-get upgrade -y \
  && apt-get install -y wget unzip xvfb libxtst6 libxrender1 python3.7-dev build-essential net-tools
#RUN apt-get install -y procps

# set environment variables
ENV TWS_INSTALL_LOG=/root/Jts/tws_install.log \
    ibcIni=/root/ibc/config.ini \
    ibcPath=/opt/ibc \
    javaPath=/opt/i4j_jres \
    twsPath=/root/Jts \
    twsSettingsPath=/root/Jts

# make dirs
RUN mkdir -p /tmp && mkdir -p ${ibcPath} && mkdir -p ${twsPath}

# copy over IB Gateway
COPY Jts /root/Jts
COPY i4j_jres /home/mmr/.i4j_jres

# download IBC
RUN wget -q -O /tmp/IBC.zip https://github.com/IbcAlpha/IBC/releases/download/3.8.2/IBCLinux-3.8.2.zip
RUN unzip /tmp/IBC.zip -d ${ibcPath}
RUN chmod +x ${ibcPath}/*.sh ${ibcPath}/*/*.sh

# copy IBC/Jts configs
COPY ibc/config.ini ${ibcIni}

# copy cmd script
WORKDIR /home
COPY cmd.sh cmd.sh
RUN chmod +x cmd.sh

# set display environment variable (must be set after TWS installation)
ENV DISPLAY=:0


WORKDIR /home
COPY ib_server ./ib_server
COPY __init__.py .
COPY requirements.txt .
RUN pip install -r /home/requirements.txt

# execute cmd script to start Xvfb and gunicorn
CMD ./cmd.sh
# CMD tail -f /dev/null

当对目录进行更改并推送时会触发容器创建,这就是为什么我必须添加井号并推送以启动构建。

【问题讨论】:

  • 发布你的 dockerfile
  • 如何触发容器创建?
  • 我已经添加了 dockerfile 并指定了如何触发容器创建。

标签: dependencies google-cloud-run google-cloud-build


【解决方案1】:

错误在于您尝试在容器中安装的 python3.7-dev 包(Dockerfile 的第 9 行),因为该包不再存在于容器的源中。它与您的更改或 Cloud Build 无关,因为自上次推送以来,该软件包可能刚刚从源中删除。

如果您需要 python-dev 包,我建议您特别考虑安装 python3-devpython3.9-dev,因为次要 python 版本中的所有更改都应该相互向后兼容。

但是,如果您真的需要python3.7-dev,则需要手动重新编译和安装软件包,或者在可以找到的地方添加源代码并安装它。请记住,此 python 映像所基于的 debian 版本与此软件包不兼容,您需要手动解决,因此这不是一个直接的解决方案。

【讨论】:

  • 你知道它是如何被删除的吗?我不认为从事这个项目的任何人都篡改了 python 包设置。另外,我将如何在 Google Cloud Platform 上安装 python3-dev 包?我在 cloud shell 中对包所做的任何更改都会在我关闭它后被删除,或者至少我是这么认为的。
  • 它已从源中删除。这通常是开发人员或源代码维护人员的决定,不涉及任何篡改,只是 Dockerfile 中的一个过时的包引用。将来我会建议使用“python3-dev”而不是特定版本,例如 3.7,因此它始终保持最新。这是关于 Dockerfile 的。如果此答案对您有用,请指出以帮助其他有类似疑问的人
  • 关于 Google Cloud Shell,它会重置,因此您对它的非持久性是正确的,但您可以像在普通 shell 中一样安装它。但是,如果您想对此提出更多问题,或者您想讨论一个特定的用例,请打开一个新问题,如果您希望我找到它,您可以在此处链接它:)
  • 这是新问题的链接,以防其他人有同样的问题:stackoverflow.com/questions/68930848/…
  • 我刚刚检查了你的新问题,现在明白你为什么要在这里问了。我的回答不是在 shell 中安装 python3-dev,而是在你的 Dockerfile 中更改它。您发布的文件中的第 9 行将 python3.7-dev 安装在您的容器内,这就是无法运行的原因。
猜你喜欢
  • 1970-01-01
  • 2021-11-05
  • 2021-10-05
  • 2021-04-08
  • 2011-11-26
  • 2021-01-19
  • 2019-12-01
  • 1970-01-01
  • 2020-05-20
相关资源
最近更新 更多