首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Kubernetes中使用dind运行私有存储库

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

Stack Overflow用户
提问于 2022-09-05 08:50:44
回答 3查看 124关注 0票数 3

我尝试运行我的私有坞映像以及 docker -dind容器,以便能够从Kubernetes中的私有映像中运行对接命令。我唯一的问题是,docker run命令不读取码头机密,因此需要运行docker login就会失败。如何将凭据传递给“码头运行”命令?

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

代码语言:javascript
复制
  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

编辑我有我的证书作为库伯内的秘密,我试图安装到正在运行的码头,但到目前为止没有任何成功:(

代码语言:javascript
复制
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

最后的目标是使“内部停靠器”(运行私有/映像:最新)能够运行任何对接命令,而无需在每个命令之前登录。

EN

回答 3

Stack Overflow用户

发布于 2022-09-05 09:43:14

假设您不是在使用码头证书认证,而是使用用户名和密码,您可以遵循以下路径:

  • 使用docker:20.1字段修改码头客户端映像( command )入口点
  • command可能如下所示:
代码语言:javascript
复制
    command: ["/bin/sh"]
    args: ["-c", "docker login...;docker run..."]  

样品工作吊舱使用的想法:

代码语言:javascript
复制
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"

基于文档

编辑:

如果确实使用了docker cert身份验证,则可以有许多选项:

  • 通过扩展docker客户端映像并使用它来烘焙证书。
  • 如果您在集群中有Kubernetes的秘密,请安装证书.
票数 1
EN

Stack Overflow用户

发布于 2022-09-05 10:45:26

dind将在/certs中创建ca、server、client cert。只需创建emptyDir卷以共享证书即可。

代码语言:javascript
复制
apiVersion: v1
kind: Pod
metadata:
  name: myapp
  labels:
    name: myapp
spec:
  volumes:
  - name: docker-tls-certdir
    emptyDir: {}
  containers:
    - name: docker-private
      image: docker:20.10
      command: ['docker', 'run', '-p', '80:8000', 'nginx' ]
      env:
        - name: DOCKER_HOST
          value: tcp://localhost:2375
      volumeMounts:
        - name: docker-tls-certdir
          mountPath: /certs
    - name: dind-daemon
      image: docker:20.10-dind
      command: ["dockerd", "--host", "tcp://127.0.0.1:2375"]
      securityContext:
        privileged: true
      volumeMounts:
        - name: docker-tls-certdir
          mountPath: /certs
票数 1
EN

Stack Overflow用户

发布于 2022-09-07 14:44:10

好的,我最终在我的docker存储库上创建了访问令牌,并使用它来执行docker login命令。它工作得很好:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73606795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档