【发布时间】:2021-06-27 15:26:30
【问题描述】:
以前有人问过类似的问题,但这些问题的解决方案并不能解决我自己的问题。我有一个依赖于基础 repo 的 repo,借此连接到 neo4j 数据库。我对基础回购工作的测试。我拥有的仓库(转换文件)已经证明可以在本地工作。当我在 Docker 中运行 repo 时,我得到了一个 FileNotFoundError,它被从基础 repo 中抛出:
基础回购模块
def get_docker_host_ip(self):
z = subprocess.check_output(['ip', '-4', 'route', 'list', 'match', '0/0'])
z = z.decode()[len('default via '):]
return z[: z.find(' ')]
回溯:
Traceback (most recent call last):
File "/opt/app/src/myscript.py", line 252, in <module>
myModule = My_Module(args)
File "/opt/app/src/myscript.py", line 45, in __init__
self.neo4jadapter = Neo4jAdapter()
File "/opt/app/base/base/neo4j_adapter.py", line 19, in __init__
neo4j_host = self.get_docker_host_ip()
File "/opt/app/base/base/neo4j_adapter.py", line 51, in get_docker_host_ip
z = subprocess.check_output(['ip', '-4', 'route', 'list', 'match', '0/0'])
File "/usr/lib/python3.7/subprocess.py", line 395, in check_output
**kwargs).stdout
File "/usr/lib/python3.7/subprocess.py", line 472, in run
with Popen(*popenargs, **kwargs) as process:
File "/usr/lib/python3.7/subprocess.py", line 775, in __init__
restore_signals, start_new_session)
File "/usr/lib/python3.7/subprocess.py", line 1522, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'ip': 'ip'
对于subprocess.check_output,我还按照其他帖子的建议添加了shell=True,但并没有什么不同:
z = subprocess.check_output(['ip', '-4', 'route', 'list', 'match', '0/0'], shell=True)
此 Traceback 仅在我在 Docker 中运行脚本时发生。我哪里错了?
【问题讨论】:
-
Docker 容器通常没有像
ip这样的低级网络管理工具; Docker 自己管理网络环境。 -
@DavidMaze:感谢您的指示,是的,看来您是对的。事实上,添加 'RUN apt-get install iproute2' 解决了这个问题
标签: python-3.x docker neo4j subprocess