在 Kubernetes 中使用 dind 运行私有存储库

Noa*_*baz 5 docker kubernetes docker-in-docker

我尝试将我的私有 docker 镜像与docker-dind容器一起运行,以便能够从 Kubernetes 中的私有镜像运行 docker 命令。我唯一的问题是该docker run命令不读取 docker-secrets,因此因要求运行而失败docker login。如何将凭据传递给 docker run 命令?

这是我的 Kubernetes 部署的一部分:

  containers:
    - name: docker-private
      image: docker:20.10
      command: ['docker', 'run', '-p', '80:8000', 'private/image:latest' ]
      resources:
        requests:
          cpu: 10m
          memory: 256Mi
      env:
        - name: DOCKER_HOST
          value: tcp://localhost:2375
      envFrom:
         - secretRef:
             name: docker-secret-keys
    - name: dind-daemon
      image: docker:20.10-dind
      command: ["dockerd", "--host", "tcp://127.0.0.1:2375"]
      resources:
        requests:
          cpu: 20m
          memory: 512Mi
      securityContext:
        privileged: true
      volumeMounts:
        - name: docker-graph-storage
          mountPath: /var/lib/docker
Run Code Online (Sandbox Code Playgroud)

编辑 我确实有我的证书作为 Kubernetes 秘密,我尝试将其安装到正在运行的 docker,但到目前为止没有任何成功:(

apiVersion: v1
data:
  .dockerconfigjson: eyJhXXXXXXdoihfc9w8fwpeojfOFwhfoiuwehfo8wfhoi2ehfioewNlcm5hbWUiOiJlbGRhcmVudGas4hti45ytg45hgiVsZGFXXXXXXyQGVudG9yLmlvIiwiYXV0aCI6IlpXeGtZWEpsYm5SdmNqb3dObVl4WmpjM1lTMDVPRFZrTFRRNU5HRXRZVEUzTXkwMk5UYzBObVF4T0RjeFpUWT0ifX19XXXXXXXXXXX
kind: Secret
metadata:
  name: staging-docker-keys
  namespace: staging
  resourceVersion: "6383"
  uid: a7yduyd-xxxx-xxxx-xxxx-ae2ede3e4ed
type: kubernetes.io/dockerconfigjson
Run Code Online (Sandbox Code Playgroud)

最终目标是让“内部 docker”(运行 private/image:latest)能够运行任何 docker 命令,而无需在每个命令之前登录。

rok*_*rok 1

假设您没有使用docker cert 身份验证,而是使用用户名和密码,您可以按照以下路径操作:

  • docker:20.1使用command字段修改 docker 客户端镜像 ( ) 入口点

  • command可能如下所示:

    command: ["/bin/sh"]
    args: ["-c", "docker login...;docker run..."]  
Run Code Online (Sandbox Code Playgroud)

使用该想法的示例工作 Pod:

apiVersion: v1
kind: Pod
metadata:
  name: myapp
  labels:
    name: myapp
spec:
  containers:
  - name: myapp
    image: docker:20.10
    command: ["/bin/sh"]
    args: ["-c", "docker version;docker info"]  
    resources:
      limits:
        memory: "128Mi"
        cpu: "500m"
Run Code Online (Sandbox Code Playgroud)

基于文档

编辑:

如果您确实使用 docker cert 身份验证,您可以有很多选择:

  • docker通过扩展客户端映像并使用它来烘焙证书。
  • 如果您将证书作为集群中的 Kubernetes 机密,则挂载证书...