Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
混合本地和远程Docker映像repo?_Docker_Kubernetes_Repository - Fatal编程技术网

混合本地和远程Docker映像repo?

混合本地和远程Docker映像repo?,docker,kubernetes,repository,Docker,Kubernetes,Repository,我在基于Kubernetes集群的CI-CD管道上工作。 管道的运行方式如下: spec: initContainers: - name: prime-the-cache image: docker:18-dind command: - sh - -c - | if something_awesome; then docker pull from/a/registry else doc

我在基于Kubernetes集群的CI-CD管道上工作。 管道的运行方式如下:

spec:
  initContainers:
  - name: prime-the-cache
    image: docker:18-dind
    command:
    - sh
    - -c
    - |
      if something_awesome; then
          docker pull from/a/registry
      else
          docker load -i some/other/path
      fi
    volumeMounts:
    - name: docker-sock
      mountPath: /var/run/docker.lock
      readOnly: true
  containers:
  - name: primary
    image: a-local-image
volumes:
- name: docker-sock
  hostPath:
     path: /var/run/docker.sock
ECR机器有码头工人。 詹金斯是一个容器。 使用Java、Maven等构建了构建器映像。 然后运行此生成器映像以生成应用程序映像 然后,该应用程序使用Helm在kubernetes AWS集群中运行。 然后使用params运行builder映像,对应用程序运行Maven驱动的测试。 现在,这些步骤的一部分不需要推送图像。例如,可以随意缓存或处置构建器映像-如果需要,可以重新构建

因此,这些图像的名称类似于mycompany/mvn builder:latest

当直接通过Docker使用时,此选项效果良好

当Kubernetes和Helm来时,它需要URI的图像,并尝试从远程repo获取它们。因此,使用本地名称mycompany/mvn builder:latest不起作用:

Error response from daemon: pull access denied for collab/collab-services-api-mvn-builder, repository does not exist or may require 'docker login'
从技术上讲,我可以命名它/mvn builder并推送它,但这打破了在minikube中本地运行所有这些的可能性,因为很难根据愚蠢的AWS 12小时令牌进行身份验证记住它在集群中运行

是否可以混合使用远程回购和本地缓存?换句话说,我可以让Docker查看远程存储库吗?如果找不到或失败,请参见上文,它将获取缓存的映像

因此,如果我在Kubernetes资源中使用foo/bar:latest,它将尝试获取,发现无法获取,并将获取本地foo/bar:latest?

我相信initContainer会这样做,前提是它可以访问/var/run/docker.sock,并且您的集群通过有条件地拉取或docker加载映像来允许这样做,这样,当主容器启动时,图像将始终被缓存

大致如下:

spec:
  initContainers:
  - name: prime-the-cache
    image: docker:18-dind
    command:
    - sh
    - -c
    - |
      if something_awesome; then
          docker pull from/a/registry
      else
          docker load -i some/other/path
      fi
    volumeMounts:
    - name: docker-sock
      mountPath: /var/run/docker.lock
      readOnly: true
  containers:
  - name: primary
    image: a-local-image
volumes:
- name: docker-sock
  hostPath:
     path: /var/run/docker.sock