部署到Google计算引擎的Docker映像继续重新启动

部署到Google计算引擎的Docker映像继续重新启动,docker,google-app-engine,google-cloud-platform,google-compute-engine,google-cloud-build,Docker,Google App Engine,Google Cloud Platform,Google Compute Engine,Google Cloud Build,我用Docker Compose用谷歌云构建了一个图像。在我的cloudbuild.yml文件中,我有以下步骤: 使用docker compose构建docker映像 标记构建的图像 创建一个实例模板 创建实例组 现在的问题是,每次构建一个新实例时,从映像创建的容器都会不断重新启动,并且永远不会真正启动。尽管如此,我还是可以构建映像,并在实例上作为容器启动它,独立于云构建的映像 我设法从日志中找到了一些线索: E1219 19:13:52 7f28dce6d700 api_服务器。cc:184元

我用Docker Compose用谷歌云构建了一个图像。在我的
cloudbuild.yml
文件中,我有以下步骤:

  • 使用docker compose构建docker映像
  • 标记构建的图像
  • 创建一个实例模板
  • 创建实例组
  • 现在的问题是,每次构建一个新实例时,从映像创建的容器都会不断重新启动,并且永远不会真正启动。尽管如此,我还是可以构建映像,并在实例上作为容器启动它,独立于云构建的映像

    我设法从日志中找到了一些线索:

    E1219 19:13:52 7f28dce6d700 api_服务器。cc:184元数据请求未成功:服务器以“禁止”响应(403):传输端点未连接

    oauth2.cc:289从元数据服务器docker获取身份验证令牌

    通过在实例中运行以下命令,我也得到了一些线索:

    docker-a-i启动

    输出:
    无法识别的输入标题:99

    cloudbuild.yml
    文件看起来像(我用
    替换了一些变量…
    ):


    我发现了这个问题,我会自己回答这个问题,以防其他人遇到同样的问题

    问题是在我的
    docker compose.yml
    中,
    stdin_open
    tty
    的配置被设置为true,但我的
    cloudbuild.yml
    文件没有接受它,并且正在无声地失败(恼人!)

    要解决此问题,您需要在
    使用容器创建
    命令上使用标志
    --container stdin
    --container tty


    更多细节可以在谷歌文档上找到

    我有一个类似的问题,原因是在Dockerfile中设置用户。我使用的是将用户更改为“node”,这是nodejs官方图像中可用的用户。但不适用于谷歌云容器

    FROM node:current-buster-slim
    USER node 
    
    FROM node:current-buster-slim
    USER node