gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:11:47 26 4
gpt4 key购买 nike

如果我想运行一个容器 B在一个容器内 A (重用 Docker 守护进程)我可以绑定(bind) mount /var/run/docker.sock/usr/bin/docker并且可以愉快地调用docker runA 内.
现在我想在 A 之间共享一个 k8s 卷和 B .为此,我想在 A 中创建一个 emptyDir 卷。并将其传递给 B使用 docker run -v .但这不起作用,因为 emptyDir 卷似乎不是 Docker 卷(运行时不会出现 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 中都可用的卷?

最佳答案

作为记录,我找到了一种解决方法,但如果您有更好的建议,请随时分享。

解决上述问题的方法是挂载一个hostPath目录D并将这个目录绑定(bind)到容器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 ,这就是我们想要的。

关于docker - 是否可以定义在 k8s 和 docker 中都可用的卷?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54088199/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com