【问题标题】:Unable to write file from docker run inside a kubernetes pod无法从 docker run 在 kubernetes pod 中写入文件
【发布时间】: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


【解决方案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

【讨论】:

  • 谢谢,我会试试的。但问题是 pod 活着时文件不存在。我的意思是我进入 pod(通过 kubectl exec - it pod - - bin/bash),运行容器,没有文件...
  • 您可能无法写信给/out
  • 嘿!我使用emptyDir 挂载/home/dir。我将其更改为 hostPath 并且它有效!非常感谢:)
【解决方案2】:

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

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

This link 为 docker 用户提供了有用的 kubectl 命令。

如果你习惯docker-compose,请参考Komposedocker-compose转到kubernetes:

在 Kubernetes 中将主机上的目录挂载为容器内的卷的一些选项:

【讨论】:

    猜你喜欢
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 2023-04-07
    相关资源
    最近更新 更多