2017-12-21 35 views
1

두 개의 파이썬 파일 my_script.pytest.py이 있으며 아래 내용이 있습니다.ModuleNotFoundError : 도커 파이썬에서 <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

: 같은

은 그래서 최종 my_script.py이 보일 것이다. –

+0

글쎄, 그건 너무 :) – favoretti

+0

@ NilsWerner 당신도 test.py에 대한 도커를 만들어야한다는 말을하는 것입니다. 그럼 효과가있을거야.? –

답변

2

좋아, 아래의 설명에 따라 좀 더 명확히 설명해 드리겠습니다. 로컬 시스템에있는 파일이 도커 컨테이너 내부의 위치와 관계가없는 경우.

따라서 본질적으로 "다른 서버"인 컨테이너에서 물건을 실행하기 전에 로컬 컴퓨터에서 컨테이너로 파일을 복사해야합니다.

당신이 어떻게 당신의 Dockerfile 요구를 달성하기 위해 원하는 것을 달성하기

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" ] 

그리고 당신은 스크립트에서 맹 글링 경로를 제거 할 수 있습니다. 당신은 제대로 대신`수동 sys.path` 덤비는의 패키징과 모듈을 설치해야합니다

#!/usr/bin/python3 

import os 
import sys 
import test as count 

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

Thanks. 하지만 왜''mkdir -p/home/user/test'를 실행해야합니까? 폴더가 이미 생성되었습니다 –

+0

도커에 있습니까? 무엇에 의해? 'FROM python : 3'에는'/ home/user/test'가 없습니다. 99 % 확실합니다. – favoretti

+0

그래, 나도 그랬지만 여전히 같은 오류. –