2017-09-21 1 views
0

배경

내가 같은 기계에 고정 표시기에서 실행되는 여러 파이썬 응용 프로그램을 시작합니다. 각 파이썬 응용 프로그램은 twisted을 사용하여 TCP으로 통신 할 서버와 클라이언트를 만들고 각 프로세스가 수신 대기하는 포트는 정적 파일로 구성됩니다.TCP 연결 실패 죽 + 후 고정 표시기 이미지

문제

내가 하나 개 이상의 고정 표시기 이미지를 (내가 docker killdocker run 사용) 다시 시작할 때 가끔, 아주 가끔, 하나의 응용 프로그램이 여전히 사용되고 살해되기 전에 사용 기회 포트가있다.

docker run 명령 후, twisted 그것이 문제 일 경우에만, (아마도 때문에 내 로깅 CONFIGS의 자세한 내용은없이, 단지이 줄) Unhandled error in Deferred: 오류가 발생합니다.

그런 다음 특정 포트를 확인하기 위해 netstat -ntlp을 사용합니다. 포트가 수신 대기 중이라는 것을 알았습니다. 그리고 난 시도 nc -l [PORT], 그것은 Address already in use을 반환합니다. 또한 netstat -a | grep ESTABLISHED을 사용하여 일부 프로세스가 이미 해당 포트에 대한 tcp 연결을 설정했는지 확인합니다.

내가이 포트에 수신 될 때까지 일시적으로

  1. 내가 문제가있는 고정 표시기 이미지를 여러 번 다시 시작이 문제를 해결하려 의미합니다.
  2. 이전에 문제가되는 도커 이미지와 통신 한 다른 도커 이미지를 죽인 다음 모든 죽인 이미지를 다시 시작했습니다.

은 내가이 상황이 발생하고 그것을 해결하는 방법을 이유를 알고 싶습니다

예상 무엇. 내 부두 이미지를 다시 시작할 때마다 netstat -ntlp을 확인하고 싶지 않습니다.

환경 :

OS : Ubuntu 14.04.5 LTS (GNU/Linux 4.4.0-53-generic x86_64)

도커 :

Client: 
Version:  1.13.1 
API version: 1.26 
Go version: go1.7.5 
Git commit: 092cba3 
Built:  Wed Feb 8 06:42:29 2017 
OS/Arch:  linux/amd64 

Server: 
Version:  1.13.1 
API version: 1.26 (minimum version 1.12) 
Go version: go1.7.5 
Git commit: 092cba3 
Built:  Wed Feb 8 06:42:29 2017 
OS/Arch:  linux/amd64 
Experimental: false 

파이썬 : Python 2.7.6 트위스트 : 17.1.0

+0

예외를 처리하지 않았고 로깅 구성 때문에 예외를 볼 수 없기 때문에 발생합니다. –

+0

로깅은 앱에서 '병렬'로 작동하므로 로거는 예외 처리기이므로 앱에 직접 추가 할 수 없습니다.'kill 또는 stop'은'외부에서 내부로 '필요합니다. 외부 쓰레드/프로세스를 포함한다면 당신은 어떤 쓰레드/프로세스도 kill/stop 할 수 없습니다. '앱 반복 '을 만드는 것은 쉽지만,'앱 수명 루프'는 모든 상태 + 이벤트를 확인해야합니다. – dsgdfg

+0

@KlausD. 로깅 문제를 살펴보고 문제가되는 고정 이미지를 시작한 후에 만이 오류 메시지를 표시합니다. @dsgdfg 파이썬 프로세스 나 트위스트 된 tcp 연결이'docker kill' 명령으로 죽지 않는다는 것을 의미합니까? 그러면 이것을 설명하는 법은 때때로 발생합니다. – user4394476

답변

0

먼저 명백한, 다음,

시도가
docker restart <container name> 

잘 작동하지 않는 경우 최후의 수단으로 다음과 같이 시도해보십시오.

docker kill --signal=SIGKILL <container name> 
+0

나는 한 번 시험해 보겠다. 이 상황이 때때로 발생하기 때문에, 나는 약간의 시간을 관찰해야 할 수도 있습니다. 고마워. 그리고 많은 도움이 되었으면 좋겠다. 아마 도커의 문서를 조금 더 수정할 필요가있을 것입니다. – user4394476