docker - 无法从 kubernetes pod 内的 docker run 写入文件

标签 docker kubernetes google-kubernetes-engine docker-volume

我有一个使用卷写入文件的 Docker 镜像:

docker run --rm -v /home/dir:/out/ image:cli args

当我尝试在 Pod 内运行它时,容器正常退出,但没有写入文件。

我不明白。

如果找不到卷,容器会抛出错误,例如,如果我在没有 -v 选项的情况下运行它,则会抛出错误:

Unhandled Exception: System.IO.DirectoryNotFoundException: Could not find a part of the path '/out/file.txt'.

但我没有从容器中收到任何错误。 它就像写入文件一样完成,但文件不存在。

我对 Kubernetes 还很陌生,但这让我抓狂。

kubernetes 是否会阻止文件写入?或者我错过了一些明显的东西?

整个 Kubernetes 上下文由 GCP Composer-airflow 管理,如果有帮助的话......

docker -v: Docker version 17.03.2-ce, build f5ec1e2

最佳答案

如果您想在 Kubernetes 中实现这种行为,您可以使用 hostPath音量。

本质上,您在 Pod 规范中指定它,然后将卷安装在 Pod 运行的节点上,然后在 Pod 退出后该文件应该位于该节点中。

apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: image:cli
    name: test-container
    volumeMounts:
    - mountPath: /home/dir
      name: test-volume
  volumes:
  - name: test-volume
    hostPath:
      path: /out
      type: Directory

关于docker - 无法从 kubernetes pod 内的 docker run 写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53328627/

相关文章:

docker - 在 docker-compose.yml 中定义卷

使用远程 API 创建 docker 容器的 Python 脚本

azure - 通过远程 api 设置 Docker Volume Driver 选择

kubernetes - 以其他用户身份在 Kubernetes pod 中执行命令

kubernetes - 可以在GKE GCP中删除具有k8s-fw *的防火墙吗

kubernetes - 如何将防火墙规则添加到 gke 服务?

jenkins - docker build 和 publish 插件使用

docker - 如何根据 Kubernetes/Docker 事件发送警报?

kubernetes - 如何在前后服务之间使用Istio虚拟服务

kubernetes - GKE NodePort服务拒绝传入流量