【发布时间】:2019-04-19 02:20:06
【问题描述】:
我有一个使用卷写入文件的 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
【问题讨论】:
-
嘿!所以你在一个容器中运行一个 docker 容器,因为 pod 本身就是一个容器。确保他是的一件事是,“/home/dir”在您的 pod 之外或其他位置在哪里。那么只能挂载它。
-
是的,这就是 docker 中的 docker。 /home/dir 在 pod 内。这里的 pod 就是容器宿主吧?
-
您的 pod(外部 docker)总是在运行。或者它也退出。
-
标准 Kubernetes 不 运行 Docker-in-Docker(通常不鼓励这样做); Pod 是独立于主机或容器本身的层。您需要在 Pod 中创建一个卷并将其挂载到容器中。不过,正如您所描述的,这种工作负载似乎不太适合 Kubernetes。
-
谢谢@DavidMaze。关于 kubernetes 我没有太多选择,这个问题是 composer-airflow 中工作流的一部分,它在 kubernetes 中运行。我们的工作流程包括在不同 docker 容器上运行的一系列命令,每个命令都使用先例生成的文件。因此,我将尝试安装在容器中的 pod 中的卷。仍然我不明白为什么一旦在 pod 中(并留在 pod 中)文件不会在容器崩溃的情况下创建......(我将粘贴一个示例,它开始是很多容器哈哈)
标签: docker kubernetes google-kubernetes-engine docker-volume