2016-12-07 48 views
0

手動運行腳本我有一個dockerfile具有下列結束Dockerfile CMD腳本不同運行到集裝箱

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(再次通過撰寫)或撰寫命令參數設置爲bash,然後在出現運行bash的終端:

python app/start.py arg1 arg2 arg3 

該腳本運行完美。

我認爲這是如何處理啓動時處理文件夾結構。有什麼我不明白CMD如何在dockerfiles中工作?

更新

  • ENTRYPOINT代替CMD運行沒有什麼區別
  • 設置CMDbash -c "python app/start.py arg1 arg2 arg3"沒什麼區別
+0

使用'import os,inspect;在'sys.path'中添加'start.py'的位置; sys.path.insert(0,os.path.realpath(os.path.abspath(os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())),'app'))) )'。 – alvits

+0

甚至更​​簡單的'import sys,os; sys.path.insert(0,os.path.join(os.getcwd(),'app'))'。 – alvits

回答

0

這絕對不是最好的解決辦法,但它結束了爲我工作。

我只是創造了一個新的頂級文件start.py有:

from app.start import startup 

startup() 

,取而代之的命令:

CMD python start.py arg1, arg2, arg3 

它工作得很好。我覺得這有點證實了我對文件層次結構的懷疑,但至於爲什麼只有在關閉時出現這種情況CMD仍然讓我難堪。任何建議更好的解決方案將不勝感激。