Dockerfile CMD脚本与在容器中手动运行脚本的运行方式不同

时间:2016-12-07 21:41:46

标签: python docker

我有一个包含以下结尾的dockerfile

CMD python app/start.py arg1 arg2 arg3

当我尝试调用run(通过撰写)时,它从我的python脚本中给出了一个错误:

Traceback (most recent call last):
  File "app/start.py", line 4, in <module>
    from utils.foo import bar
ImportError: No module named 'utils'

然而,当我调用run ... bash(再次通过撰写)或将compose命令参数设置为bash,然后在出现的bash终端中运行:

python app/start.py arg1 arg2 arg3

脚本运行完美。

我认为这与启动时如何处理文件夹结构有关。有什么我不明白CMD如何在dockerfiles中工作?

更新

  • 使用ENTRYPOINT而不是CMD投放没有任何区别
  • CMD设为bash -c "python app/start.py arg1 arg2 arg3"没有任何区别

1 个答案:

答案 0 :(得分:0)

这绝对不是最好的解决方案,但它最终为我工作。

我只是创建了一个新的顶级文件start.py

from app.start import startup

startup()

并替换命令:

CMD python start.py arg1, arg2, arg3

它工作正常。我觉得这有点证实了我的怀疑,它与文件层次结构有关,但至于为什么只有在运行CMD时才会发生这种情况仍然让我感到难过。任何有关更好解决方案的建议都会非常感激。