繁体   English   中英

Docker 找不到 kubernetes 配置文件

[英]Docker Can't find kubernetes Config File

我正在尝试容器化一个 python 应用程序,我在其中使用了 Kubernetes 包。 我的 Dockerfile 是:

FROM python:3.10.6

ADD App_pod.py .
ADD config.yml ~/.kube/config

RUN pip3 install requests beautifulsoup4
RUN pip3 install kubernetes
RUN apt-get install -y ca-certificates curl

CMD ["python3","./App_pod.py"]

当我输入 docker run -i -t run 时,它显示以下错误:

> Traceback (most recent call last):
> File "//./App_pod.py", line 9, in <module>
> config.load_kube_config()
> File "/usr/local/lib/python3.10/site-packages/kubernetes/config/kube_config.py", line 813, in load_kube_config
> loader = _get_kube_config_loader(
> File "/usr/local/lib/python3.10/site-packages/kubernetes/config/kube_config.py", line 770, in _get_kube_config_loader
> raise ConfigException(
> kubernetes.config.config_exception.ConfigException: Invalid kube-config file. No configuration found.

我试图从 raise exeption 中更改出现的错误,但它仍然向我显示相同的错误,所以我想它可能没有检测到我所做的更改。

我使用 ADD 命令将配置文件复制到特定路径,但它仍然显示相同的错误。 我还尝试挂载该卷,但由于还没有容器,因此无法挂载,因为它首先需要创建 conf 文件。 有没有人遇到这个问题并且知道如何解决?

几个问题:

  • ~在 Linux 上有特殊含义; 它是用户主目录的快捷方式。 我认为~不适用于 Dockerfile ADD (或COPY )命令的目标路径。 您应该改用特定路径
  • 不建议在容器中包含包含凭据的文件(例如 kubeconfig 文件)。 您应该改为挂载这样的数据。
  • 您正在重命名文件config.yml是源,但config是可能有问题的目标。

您没有包含完整的 Dockerfile,因此不清楚您的FROM映像是什么,并且您没有包含App_pod.py文件的源代码,因此不清楚它在哪里寻找 kubeconfig 文件,但是......

  1. 通过将 kubeconfig 文件作为参数提供或使用环境变量来概括代码对 kubeconfig 文件的使用。 这样,位置是动态的,代码可以在容器外或容器内运行
  2. run容器时将文件挂载到容器中

假设您更改代码以接受工作目录中config.yml的命令行参数,例如:

python3 App_pod.py ~/.kube/config

然后,当您运行容器时,您需要将config.yml挂载到容器中并引用它。 在下文中,我使用不同的源文件夹和目标文件夹来说明这一点:

docker run \
--interactive --tty --rm \
--volume=~/.kube/config:/somewhere/.kube/config \
your-container /somewhere/.kube/config

您可以在--volume标志中使用~因为~在您的 (Linux) 主机上有意义。 该文件映射到容器中的/somewhere/.kube/config ,因此您的 Python 文件在调用它时需要指向容器位置 (.)。

此外,为了您可以使用命令行参数,我鼓励您使用ENTRYPOINT而不是CMD来运行您的 Python 程序:

...
ENTRYPOINT ["python3","./App_pod.py"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM