无法从kubernetes容器内运行的docker写入文件

时间:2018-11-15 22:12:26

标签: 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

2 个答案:

答案 0 :(得分:1)

如果要在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

答案 1 :(得分:1)

  

当我尝试在Pod中运行此程序时,容器正常退出,但未写入文件

首先,不需要在pod内运行docker run命令:)。应该为Pod编写一个spec file(yaml),并且kubernetes将为您使用docker在Pod中运行容器。理想情况下,使用kubernetes时无需运行docker命令(除非您正在调试与docker相关的问题)。

This link具有适用于docker用户的kubectl命令。

如果您习惯使用docker-compose,请参考Komposedocker-compose到kubernetes:

一些选项可将主机上的目录作为卷安装在kubernetes中的容器内: