存在具有绝对路径和文件的python FileNotFoundError:[Errno 2]

存在具有绝对路径和文件的python FileNotFoundError:[Errno 2],python,python-3.x,kubernetes,minikube,Python,Python 3.x,Kubernetes,Minikube,我正在运行一个Python脚本作为Kubernetes的工作。但我有下一个问题。我已经试过使用chmod-r777/home/vagrant/了,但是它并不能使脚本成功运行 Traceback (most recent call last): File "app.py", line 39, in <module> main() File "app.py", line 28, in main config.load_kube_config(config_file

我正在运行一个Python脚本作为Kubernetes的工作。但我有下一个问题。我已经试过使用chmod-r777/home/vagrant/了,但是它并不能使脚本成功运行

Traceback (most recent call last):
  File "app.py", line 39, in <module>
    main()
  File "app.py", line 28, in main
    config.load_kube_config(config_file=kubeconfig)
  File "/usr/local/lib/python3.6/site-packages/kubernetes/config/kube_config.py", line 470, in load_kube_config
    config_persister=config_persister)
  File "/usr/local/lib/python3.6/site-packages/kubernetes/config/kube_config.py", line 427, in _get_kube_config_loader_for_yaml_file
    with open(filename) as f:
FileNotFoundError: [Errno 2] No such file or directory: '/home/vagrant/.kube/config'

问题是脚本正在Docker容器中运行。该容器有自己的文件系统,而不是承载它的任何机器的文件系统。事实上,这就是容器的主要意义:它们就像一台独立的计算机,不需要真正的独立计算机

解决方案就不那么明显了,因为不清楚您为什么希望它起作用,或者您正在尝试做什么。可能有意义的事情包括:

更改docker生成脚本以将文件复制到容器中。 设置主机文件共享,使真正机器的文件系统的一部分可用于容器,然后使容器装载该文件系统。 设置正常的文件共享,以便网络上的任何人都可以使用真实机器的部分文件系统,然后让容器装载该文件系统。 使用一些更高级的功能,如Kubernetes ConfigMaps,将文件公开给容器。
这似乎是一个愚蠢的问题,但是,为了安全起见,考虑到你正在做Kubernetes的事情……脚本是否与你正在做ls的shell在同一台机器上运行?同时,Python脚本或文件名中是否有不可打印的字符?您可以在脚本中使用printreprfilename进行检查,在shell中使用ls/home/vagrant/.kube/config进行检查。同样,可能不是问题所在,但很容易排除,因此值得排除……是的,我在同一个ssh会话中运行所有内容。唯一的区别是app.py在Kubernetes管理的Docker容器中运行。我不这么认为,如果我在python控制台中手动运行这些命令,它就可以正常工作。这很奇怪,如果在容器中运行脚本,它看到的是容器的文件系统,而不是主机的文件系统。这就是问题所在:该文件不存在于容器中。如果您打算将外部文件系统的一部分作为容器的一部分安装,则需要修复该部分。您可以通过对容器进行炮击并在容器中执行ls来验证这一点。其想法是运行Kubernetes作业,列出所有名称空间中的所有POD。这不像我读到的那样简单,因为我需要一些配置文件。谢谢你的帮助
vagrant@vagrant:/vagrant/podsLister$ kubectl delete job pod-lister
job.batch "pod-lister" deleted
vagrant@vagrant:/vagrant/podsLister$ ls /home/vagrant/.kube/
cache  config  http-cache