【问题标题】:Mounting folder into Docker container inside a Kubernetes Pod将文件夹挂载到 Kubernetes Pod 内的 Docker 容器中
【发布时间】:2021-11-21 11:46:06
【问题描述】:

我有这个 pod 定义:

apiVersion: v1
kind: Pod
spec:
  securityContext:
    runAsUser: 1000
    runAsGroup: 1000
    fsGroup: 998 # Group ID of docker group on the node

  containers:
    - name: someconainter
      image: someimage
      resources:
        requests:
          memory: "8G"
          cpu: "6"
        limits:
          memory: "10G"
          cpu: "8"
      imagePullPolicy: Always
      tty: true
      command:
        - cat
      volumeMounts: 
        - mountPath: /var/run 
          name: docker-sock 
  volumes:
    - name: docker-sock 
      hostPath: 
          path: /var/run 

如您所见,我已将 Docker 套接字从节点安装到 pod。

然后在 pod 中,我尝试像这样执行 docker run 命令:

docker run --rm -v ${helmChartFolder}:/chart:ro ubuntu ls -lah

然后挂载的/chart 文件夹是完全空的,尽管在 pod 本身上它不是

那么这可能是什么原因,我一直在尝试调整 -v 参数,甚至尝试了 --mount,但到目前为止没有运气。

【问题讨论】:

  • Kubernetes 节点不一定运行 Docker 守护程序,而且由于您可以非常简单地使用 Docker 来根主机,因此这是一个巨大的安全隐患。 Kubernetes 的环境也足够复杂,即使可能,混合 Docker 和 Kubernetes 容器也不一定能很好地工作。你可以改用 Kubernetes API 吗?您是否需要运行时访问容器系统?

标签: docker kubernetes kubernetes-pod


【解决方案1】:

当您在 docker 容器上执行绑定挂载时,路径的主机端始终来自 docker 守护程序的点。假设您的 ${helmChartFolder} 是此 pod 内的路径,那么容器中的空白目录将表明您的主机在该位置没有任何内容。

如果您想将该文件夹中的数据共享到 docker 容器,那么最好的选择是复制它。

这是实现这一目标的众多方法之一:

docker create --name mycontainer -v /chart -w /chart ubuntu ls -lah
tar -C ${helmChartFolder} -c . | docker cp - mycontainer:/chart
docker start -a mycontainer
docker rm -v mycontainer

这会在 /chart 创建一个带有匿名卷的容器(可选择使用匿名卷)。 'docker cp' 将相关目录的内容复制到 /chart(我使用 tar 管道技巧非常明确地说明我希望目录的所有内容如何直接在 /chart 中结束)。最后,我启动附加的容器,我看到输出运行显示 /chart 的内容。 docker rm-v 选项表示要明确清理匿名卷,因此我最终会得到一个干净的状态。

这种方法并不是真正特定于在 kubernetes pod 中运行 docker 客户端,而是更多地与针对有效远程的 dockerd 运行 docker 客户端有关。 dockerd 不在该 pod 内运行,因此它有自己的文件系统和环境。套接字 hostPath 只是访问其他地方的 dockerd 的一种方式。

我在旧 CICD 系统中使用类似的“docker cp”类型设置,其中 cicd 作业针对远程 dockerd 实例运行“docker”cli。我可以将文件复制到停止的容器中或从中复制文件,这对于在容器运行之前进行设置或在完成后获取构建工件非常方便。

【讨论】:

    猜你喜欢
    • 2021-04-11
    • 2016-09-18
    • 2018-05-19
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    相关资源
    最近更新 更多