【问题标题】:Google cloud compute instance update谷歌云计算实例更新
【发布时间】:2020-09-06 19:02:49
【问题描述】:

我在谷歌计算实例中使用 docker 映像部署了一个网站。

我无法使用新图像更新谷歌云实例。使用新的 docker 映像更新计算实例并运行容器不会改变任何事情。

以下是我更新 google 计算实例所采取的步骤:

docker build -t vue_app -f deploy/web/Dockerfile . --tag gcr.io/namesapi-1581010760883/vue-app:v1
docker push gcr.io/namesapi-1581010760883/vue-app:v1
gcloud compute instances update-container --container-image=gcr.io/namesapi-1581010760883/vue-app:v1 vue-app-vm

所以在第一行中,我构建了包含网站和 http-server 的图像。我在本地运行它,可以确认图像正常工作并包含我期望的所有更改。

下一行是将图像推送到谷歌云,最后第三行应该用新图像更新现有的谷歌计算实例。

运行此操作后,所有更改都不会反映在实例中。我访问了实例上托管的网站,发现没有任何变化。我已经多次执行这些相同的步骤,直到最近它都运行良好。我错过了什么?

【问题讨论】:

    标签: docker google-cloud-platform google-compute-engine google-compute-api


    【解决方案1】:

    解决了这个问题。以供将来参考运行以下

    gcloud compute instances update-container --container-image=gcr.io/namesapi-1581010760883/vue-app:v1 vue-app-vm
    

    不会替换实例上的现有图像,而是创建一个新图像。所以一段时间后,实例会积累一些图像:

    REPOSITORY                                            TAG                 IMAGE ID            CREATED             SIZE
    gcr.io/namesapi-1581010760883/vue-app                 v1                  d21bd8939323        9 days ago          394MB
    gcr.io/namesapi-1581010760883/vue-app                 <none>              c136b1c9e0d4        13 days ago         387MB
    gcr.io/namesapi-1581010760883/vue-app                 <none>              b1b11f2c9678        4 weeks ago         385MB
    gcr.io/namesapi-1581010760883/vue-app                 <none>              a5ef94db2438        4 weeks ago         385MB
    gcr.io/namesapi-1581010760883/vue-app                 <none>              23b52253c060        6 weeks ago         385MB
    gcr.io/namesapi-1581010760883/vue-app                 <none>              cb03925836a7        2 months ago        384MB
    gcr.io/gce-containers/konlet                          v.0.9-latest        da64965a2b28        19 months ago       73.4MB
    gcr.io/stackdriver-agents/stackdriver-logging-agent   0.2-1.5.33-1-1      fcfafd404600        22 months ago       548MB
    

    我认为在我的情况下发生的情况是计算实例的磁盘空间不足,并且在运行上述命令时未推送新映像。谷歌云 API 没有发出警告或任何东西,这就是为什么这很难理解。

    通过手动登录实例并删除旧图像,然后重复原始问题中的步骤来解决此问题。

    【讨论】:

      【解决方案2】:

      感谢@RaidasGrisk!

      这个问题太疯狂了?

      您可以使用启动脚本创建您的实例,该脚本将清理您未使用的 docker 映像:

      gcloud compute instances create-with-container my-instance \
        --machine-type f1-micro \
        --metadata startup-script='#! /bin/bash
      # Clear old Docker images
      docker image prune -af' \
        --zone us-central1-a \
        --container-image gcr.io/my-project/my-image
      

      此外,您可以使用 gcloud 客户端从您自己的机器上删除未使用的 Docker 映像:

      # Only the first time
      gcloud compute config-ssh 
      
      gcloud compute ssh --verbosity=debug my-instance --command "docker image prune -af"
      

      【讨论】:

      • 在启动脚本中修剪“未使用”图像时会发生什么?在启动时,没有容器在运行,所以脚本会删除所有镜像,然后 GCE 会从头开始重新安装所有内容?
      • @kennysong 不,当启动脚本被调用时,你的容器已经在运行了
      猜你喜欢
      • 2017-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-12
      相关资源
      最近更新 更多