【问题标题】:subprocess.check_output failing within DockerDocker 中的 subprocess.check_output 失败
【发布时间】: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


【解决方案1】:

感谢@DavidMaze的评论,ip工具需要通过Docker安装,例如:

RUN apt-get install iproute2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多