【问题标题】:How can I create containers at time of instance creation from my project container images如何在从我的项目容器映像创建实例时创建容器
【发布时间】:2015-11-12 17:20:46
【问题描述】:

我正在尝试使用机器启动时创建的容器启动 container-vm Google Compute Engine VM 实例。您可以在此文档部分找到一个示例:Creating containers at time of instance creation

在给定的示例中一切正常:

apiVersion: v1
kind: Pod
metadata:
  name: service
spec:
  containers:
    - name: jillix-service
      image: gcr.io/google-containers/busybox
      command: ['nc', '-p', '8000', '-l', '-l', '-e', 'echo', 'hello world!']
      imagePullPolicy: Always
      ports:
        - containerPort: 8000
          hostPort: 80

但是当我尝试使用我自己的容器映像时,该映像无法正常工作:

apiVersion: v1
kind: Pod
metadata:
  name: service
spec:
  containers:
    - name: jillix-service
      image: gcr.io/sigma-cairn-99810/service
      imagePullPolicy: Always
      ports:
        - containerPort: 8000
          hostPort: 80

在工作示例中,docker 报告以下容器映像位于 VM 上:

$ sudo  docker images
REPOSITORY                         TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
gcr.io/google_containers/pause     0.8.0               2c40b0526b63        7 months ago        241.7 kB
gcr.io/google-containers/busybox   latest              4986bf8c1536        10 months ago       2.433 MB

但是当我使用我的容器图像时,这是缺失的:

gabriel@container-image-builder:~$ sudo docker images

存储库标记图像 ID 创建的虚拟大小 gcr.io/google_containers/pause 0.8.0 2c40b0526b63 7 个月前 241.7 kB

所以,我认为这就是我的容器没有启动的原因。但是为什么虚拟机不下载我的gcr.io/sigma-cairn-99810/service 图像呢?

它与身份验证有什么关系吗? (当我手动登录VM和gcloud docker pull时,我会先提示我gcloud auth login,然后我可以正常拉取我的图像和docker run,一切正常。)

【问题讨论】:

    标签: docker gcloud google-kubernetes-engine google-container-registry


    【解决方案1】:

    您启动的容器虚拟机是否(至少)具有存储“只读”范围?

    您可以通过以下方式检查:

    curl -H 'Metadata-Flavor: Google' http://metadata.google.internal./computeMetadata/v1/instance/service-accounts/default/scopes
    

    【讨论】:

    • 我应该从 VM 本身还是从我创建 VM 的地方运行它? internal.后面是不是多了一个点?从虚拟机我得到一个 404 HTML 响应(有或没有额外的点),从创建虚拟机的机器上,它无法识别 URL(metadata.google.internal)中的域,这让我假设我必须在里面运行它机器。
    • 尾随的点很奇怪,使它成为一个完全合格的域名 (FQDN)。您可以尝试从末尾删除default/scopes 吗?看起来您的虚拟机可能没有任何凭据。可以在 gcloud 命令中添加--scopes=storage-ro 来创建实例吗?
    • 是的,我的实例没有服务帐户。我添加了<project-id>-compute@developer.gserviceaccount.com 服务帐户,并将其范围指定为https://www.googleapis.com/auth/devstorage.read_only。现在在镜像创建过程中拉取私有容器镜像,并且我的容器随机器启动。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    • 2020-06-14
    相关资源
    最近更新 更多