2017-12-21 13 views
1

以下の内容の2つのpythonファイルmy_script.pytest.pyがあります。ModuleNotFoundError:ドッカーPythonの<name>がありません

my_script.py

#!/usr/bin/python3 

import os 
import sys 

sys.path.append("/home/user/test") 
import test as count 

data = count.function() 
print(data) 

test.py

#!/usr/bin/python3 

import time 

def function(): 
     print("This is function") 
     return "test" 

私はmy_script.pyを実行すると、私は次のような結果を得る:私はドキュメントを作成し

This is function 
test 

をDockerfileを使用してmy_script.pyのKERの画像:

FROM python:3 

ADD my_script.py/

CMD [ "python3", "./my_script.py" ] 

しかし、私はそのコンテナを実行しているとき、私はエラーを取得しています:

Traceback (most recent call last): 
    File "./my_script.py", line 13, in <module> 
    import test as count 
ModuleNotFoundError: No module named 'test' 

は当初、私は、コンテナが自動的にtest.pyを探しますし、実行しますと思いましたその機能ではありません。どうすればこの問題を解決できますか。

+1

。 –

+0

まあ、あまりにも:) – favoretti

+0

@ NilsWernerあなたもtest.pyのドッカーを作成する必要があると言うことを意味します。その後、それは動作します。 –

答えて

2

[OK]をクリックして、次のコメントに基づいてもう少し明確にします。 あなたのファイルがあなたのローカルシステム上のどこにあっても、あなたのドッカーコンテナー内のどこに関係するかは関係ありません。

したがって、コンテナ(本質的に「別のサーバ」のソート)を実行する前に、ローカルマシンからコンテナにファイルをコピーする必要があります。

FROM python:3 

RUN mkdir -p /home/user/test 
ADD my_script.py /home/user/test/ 
ADD test.py /home/user/test/ 

CMD [ "python3", "/home/user/test/my_script.py" ] 

そして、あなたのスクリプトからマングリングあなたのパスを削除することができます:あなたが見えるようにあなたのDockerfileニーズを達成するために欲しいものを達成するために

最終my_script.pyは次のようになりますようにするには:あなたが適切に代わり、手動sys.path` `をいじりの、あなたのモジュールをパッケージ化してインストールする必要があり

#!/usr/bin/python3 

import os 
import sys 
import test as count 

data = count.function() 
print(data) 
+1

ありがとう。しかし、なぜ私は '' mkdir -p/home/user/test'を実行すべきですか?フォルダはすでに作成されています –

+0

ドッキングステーションにありますか?何によって? 'FROM python:3'に'/home/user/test'がありません。私はそれについて99%確信しています。 – favoretti

+0

これもやったけど、それでも同じエラーです。 –

関連する問題