2017-04-03 2 views
2

Docker 컨테이너에서 실행되는 Django 앱을 작업하기 시작했습니다. Docker 컨테이너와 Django 앱 컨텍스트 내에서 코드를 실행하는 Emacs에서 interactive python을 사용할 수 있기를 원합니다. 필자는 기본적으로 이맥스가 Docker 컨테이너 내에서 실행하는 데 사용되는 파이썬 인터프리터를 원한다. 이것은 것을 의미한다Emacs의 Elpy in-buffer 파이썬 인터프리터를 도커 컨테이너에 연결하는 방법은 무엇입니까?

CMD ./manage.py shell 

:

나는 그것이 끝나는 장고 명령을한다는 점에서 내 실제 Dockerfile 용기 만 다른 수정 Dockerfile을 만드는 대신 호출하여 대부분의 경우이를 관리해야 그 Docker 컨테이너를 실행할 때 실제로 컨테이너 내에서 실행되는 Django 인터프리터를 얻습니다. 나는 추가하여 파이썬 쉘을 시작할 때 Elpy이 호출이 :

(setq python-shell-interpreter "/path_to_my_script/run_shell.sh") 

.emacs.d/init.el 파일에. 여기서 "/path_to_my_script/run_shell.sh"스크립트는 컨테이너를 실행하는 스크립트입니다.

이 부분은 실제로 부분에 적용됩니다. 나는

from django.utils import timezone 

과 같은 코드의 라인을 강조 표시하고 이맥스 명령 elpy-shell-send-region-or-buffer을 실행할 수 오전이 코드를 실행합니다. 그런 다음 강조 표시 할 수 있습니다.

print(timezone.now()) 

현재 시간이 인쇄됩니다. 이 코드가 실제로 실행하여 내 컨테이너에서 실행되고 있는지 확인했습니다 :

import os 
print(os.getcwd()) 

내 부두 노동자 컨테이너의 사용자의 홈 디렉토리를보고.

이 설정으로 아직 문제가되는 것은 동일한 elpy-shell-send-region-or-buffer 명령을 사용하여 여러 줄의 파이썬을 동시에 실행하려고 할 때입니다. 내가 한 줄 이상을 선택하고 내가 파이썬 쉘에서 다음과 같은 오류 얻을 그 명령을 실행하면 : 나는 다음과 같은 질문에 어떤 답을 찾을 수 없었습니다

Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/usr/local/lib/python3.5/codecs.py", line 895, in open 
    file = builtins.open(filename, mode, buffering) 
FileNotFoundError: [Errno 2] No such file or directory: '/tmp/py10324GOe' 

을 :

  • 왜 코덱입니다 .py tmp 파일을 읽으려고?
  • 파이썬이 만든 임시 파일은 무엇입니까? (일부 파이썬 코드 실행을하고 /tmp를 디렉토리에 보면 당신은 아마 py271761jE 같은 파일을 많이 볼 수 있습니다.)
  • 왜/tmp 디렉토리 내 도커 컨테이너 비어? 파이썬이 그 디렉토리에있는 파일을 만들고 읽으 려하지만 실패하고있는 것 같습니다.
  • 어떻게 디버깅 할 수 있습니까?

누구나이 질문에 답하면 거대한 도움이 될 것입니다. 이 문제에 대한 정보를 얻을 수 없었습니다./tmp 디렉토리의 py * 파일에 대한 인터넷 검색은 tempfile 패키지를 나타냅니다.

무슨 일이 벌어지는 지 모르겠지만, 현재의 이론은 파이썬 셸에 여러 줄이있는 영역이 전송 될 때 줄 바꿈 문자를 처리해야 코덱 파일을 사용하려고한다는 것입니다. 어떻게 든이 파일은 임시 파일에 의존하고 도커 컨테이너가이를 망쳐 놓고 있다고 생각합니다. 이 이론이 얼마나 가까운 지 모르지만 더 자세히 조사 할 방법을 모르겠습니다.

답변

2

왜 tmp 파일을 읽으려고합니까?

나는이 일어나고있는 것입니다 확신 해요 :

  1. 이맥스는 컨테이너가 호스트의 /tmp/ 액세스 할 수 없기 때문에 이맥스 /tmp/py10324GOe
  2. 파이썬이 실패로드 파이썬을 지시 /tmp/py10324GOe
  3. 에 코드를 작성합니다. 컨테이너에는 별도의 /tmp/ 디렉토리가 있습니다.

이 문제를 해결하는 가장 간단한 방법은 호스트의 /tmp/ 디렉토리를 컨테이너의 /tmp/ 디렉토리에 연결하는 것입니다. 일부 인터넷 검색은 다음과 같은 명령으로 안내합니다.

docker run ... -v /tmp:/tmp 

나는이 코드를 테스트하지 않았지만 올바른 방향으로 보입니다.

관련 문제