【问题标题】:Cannot connect to other container in kubernetes pod through localhost无法通过 localhost 连接到 kubernetes pod 中的其他容器
【发布时间】:2021-06-07 05:41:39
【问题描述】:

我正在尝试启动 docker-in-docker,以便可以在同一个 Kubernetes pod 中的不同容器中连接到它。我正在使用以下 yaml:

apiVersion: batch/v1
kind: Job
metadata:
  name: {{job_name}}
  labels:
    taskType: store_v510
    taskName: {{task_name}}
spec:
  template:
    spec:
      activeDeadlineSeconds: 86400
      volumes:
        - name: hdfs-volume
          configMap:
            name: hdfs-config
            items:
              - key: core-site.xml
                path: core-site.xml
              - key: hadoop-env.sh
                path: hadoop-env.sh
              - key: hdfs-site.xml
                path: hdfs-site.xml
              - key: log4j.properties
                path: log4j.properties
        - name: download-dir
          hostPath:
              path: /tmp/store_pipeline
        - name: docker-graph-storage 
          emptyDir: {}
      containers:
        - name: {{job_name}}
          envFrom:
          - configMapRef:
              name: job-configs
          env: 
          - name: DOCKER_HOST 
            value: tcp://localhost:2375
          volumeMounts: 
          - mountPath: /tmp/store_pipeline
            name: download-dir
          image: registry.com.cn/com/store_pipeline:0.1
          imagePullPolicy: Always
          resources:
            requests:
              cpu: 2
              memory: 32Gi
              nvidia.com/gpu: 0
            limits:
              cpu: 2
              memory: 40Gi
              nvidia.com/gpu: 0
          command: ["bash", "run_store_pipeline.sh", "--data_dir", "{{data_dir}}", "--config_dir", "{{config_dir}}", "--output_dir", "{{output_dir}}"]
        - name: dind-daemon 
          image: registry.com.cn/com/1.12.6-dind
          resources: 
              requests: 
                  cpu: 20m 
                  memory: 512Mi 
          securityContext: 
              privileged: true 
          volumeMounts: 
            - name: docker-graph-storage 
              mountPath: /var/lib/docker 
          command: []

根据我看到的文档,我应该能够通过设置 DOCKER_HOST = tcp://localhost:2375 连接到 docker-in-docker docker 守护进程。但是,我不能这样做。

我注意到,如果我在本地测试它并在同一个 docker 网络中运行这两个容器,我可以通过指定实际容器名称(即 tcp://dind-daemon:2375)来连接它们。谢谢!

【问题讨论】:

  • 使用 Docker-in-Docker 有点不寻常,尤其是在 Kubernetes 中。您可以使用 Kubernetes API 为您需要创建的任何其他容器创建 Kubernetes 原生对象吗?
  • @David Maze 这并不理想,但我们希望在本地支持 docker-compose 进行本地实验,但使用 kubernetes 运行更大规模的实验。理想情况下,希望使用一个界面,而不是维护单独的 kubernetes 和 docker-compose 配置。

标签: docker kubernetes docker-in-docker


【解决方案1】:

您的设置似乎是正确的。我假设 docker 镜像与公共注册表中的当前 docker 镜像相当。

docker-in-docker 通常只监听 2376 端口上的 TLS 安全请求。

如果您希望能够在没有相互 TLS 身份验证的情况下在 2375 上使用它,则需要将环境变量 DOCKER_TLS_CERTDIR 设置为空值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-16
    • 2020-10-05
    • 2018-08-09
    • 2018-02-19
    • 2015-08-21
    • 1970-01-01
    • 2020-09-02
    • 2021-11-24
    相关资源
    最近更新 更多