开发者社区> 问答> 正文

是否可以定义在k8s和docker中都可用的卷?

我想在容器B中运行一个容器A(重用Docker守护进程)。对于我刚刚绑定安装/var/run/docker.sock和/usr/bin/docker并能愉快地调用docker run内A。现在我想在A和之间分享一个volume B。为此我想到了创建一个emptyDir volumeA并将其传递给B使用docker run -v。但这不起作用,因为emptyDir volume似乎不是Docker volume(它在运行时不会出现docker volume ls)。

下面的代码段会打印一个cache-volume未显示的音量列表:
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:

  • image: alpine
    name: test-container
    command: [ash]
    args: ["-c", "docker volume ls"]
    volumeMounts:

    • name: dockersock
      mountPath: "/var/run/docker.sock"
    • name: dockerlib
      mountPath: "/usr/bin/docker"
    • name: cache-volume
      mountPath: /cache

    volumes:

  • name: dockersock
    hostPath:
    path: /var/run/docker.sock
  • name: dockerlib
    hostPath:
    path: /usr/bin/docker
  • name: cache-volume
    emptyDir: {}

所以问题是:有没有办法在k8s和docker中定义一个可用的volume?

展开
收起
k8s小能手 2019-01-11 14:18:06 2270 0
1 条回答
写回答
取消 提交回答
  • 整合最优质的专家资源和技术资料,问答解疑

    上述问题的解决方案是挂载hostPath目录D并将此目录绑定到容器中B。

    apiVersion: v1
    kind: Pod
    metadata:
    name: test-pd3
    spec:
    containers:

    • image: alpine
      name: test-container
      command: [ash]
      args: ["-c", "echo blabla > /home/test.txt ; docker run -v /home:/home --entrypoint ls alpine /home"]
      volumeMounts:

      • name: dockersock
        mountPath: "/var/run/docker.sock"
      • name: dockerlib
        mountPath: "/usr/bin/docker"
      • name: home
        mountPath: "/home"

      volumes:

    • name: dockersock
      hostPath:
      path: /var/run/docker.sock
    • name: dockerlib
      hostPath:
      path: /usr/bin/docker
    • name: home
      hostPath:
      path: /home

    以上代码片段的结果是B现在有了/home/test.txt,

    2019-07-17 23:25:21
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
ACK 云原生弹性方案—云原生时代的加速器 立即下载
ACK集群类型选择最佳实践 立即下载
企业运维之云原生和Kubernetes 实战 立即下载