我使用golang以编程方式创建和销毁使用计算引擎API的一次性计算引擎实例。
我可以很好地创建一个实例,但我真正遇到的问题是在启动时启动一个容器。
您可以在控制台UI中这样做:
但据我所知,以编程的方式进行它是非常困难的,特别是以Container作为基本映像。我尝试过执行一个执行docker pull us-central1-docker.pkg.dev/project/repo/image:tag
的启动脚本,但是它失败了,因为您需要首先执行gcloud auth configure-docker us-central1-docker.pkg.dev
才能工作,而且COOS没有gcloud或包管理器来获得它。
我所有的变通办法似乎都很烦人:
我是遗漏了什么,还是不使用gcloud或控制台UI而将容器部署到计算引擎实例真的很麻烦?
发布于 2021-11-10 20:28:42
要让Compute引擎在Compute引擎启动时启动容器,必须为容器的描述定义元数据。当COOS启动时,它似乎运行了一个名为konlet的应用程序,在这里可以找到:
https://github.com/GoogleCloudPlatform/konlet
如果我们看一下这方面的文档,就会发现:
代理解析存储在VM实例元数据中的容器声明,在gce-容器声明键下,并使用声明的配置选项启动容器。
不幸的是,我还没有找到任何关于元数据结构的正式文档。虽然我找不到文档,但我确实找到了两个可能的解决方案:
或
发布于 2021-11-11 20:47:48
事实证明,在容器优化操作系统中,从Artifact中取出一个容器并不太难:
docker-credential-gcr configure-docker --registries [region]-docker.pkg.dev
请参阅:或
因此,您可以做的是将上面的行与docker pull [image]
和docker run ...
一起放入启动脚本中。使用metadata
字段:https://cloud.google.com/compute/docs/instances/startup-scripts/linux#api创建实例时,可以指定启动脚本
这似乎是以编程方式提供带有容器的实例的最简单的方法。
发布于 2022-03-01 17:34:39
你提到你用docker-credential-gcr
来解决你的问题。我在我的启动脚本中尝试了同样的方法:
docker-credential-gcr configure-docker --registries us-east1-docker.pkg.dev
但它会返回:
ERROR: Unable to save docker config: mkdir /root/.docker: read-only file system
还需要采取其他措施吗?谢谢。
https://stackoverflow.com/questions/69922863
复制相似问题