docker - 容器删除后,主机映射给容器的端口为何并立即未回收利用?
阿神
阿神 2017-04-21 10:55:34
0
1
888

新建容器时映射某些端口,如下:

docker run -d -p 22 -p 80 ubuntu /usr/sbin/sshd -D

主机将自动给容器的22和80映射两个端口,如:
0.0.0.0:49155->22/tcp, 0.0.0.0:49156->80/tcp
当该容器停止并且删除后,49155和49156这两个主机端口应该被释放,留给新的容器使用,但实际此时再新建容器映射端口发现,这两并未使用,而是系统自动分配这俩端口后面新的端口,比如49157...
只有docker服务重启后原来空出来的端口才会被分配。在三台不同的docker主机上做实验都是如此,貌似不是我配置的问题,不知大家的环境如何?求解!

阿神
阿神

闭关修行中......

모든 응답(1)
Peter_Zhu

소스코드를 보면 알 수 있다docker / runtime / networkdriver / portallocator / portallocator.go
Docker의 동적 범위 포트는 49153-65535

으아아아

포트 할당 방법은 순차적으로 증가하며, 최대값에 도달한 후 처음부터 주기가 시작됩니다

으아아아

컨테이너가 파괴되면 항구가 해제됩니다

으아아아

findNextPort 메서드는 nexPort 메서드에서 반환된 값에서 사용되지 않은 값을 선택합니다. 검색 후에도 해당 값을 찾을 수 없으면 ErrAllPortsAllocated 예외가 발생합니다.

으아아아

결론적으로 포트가 실제로 해제되었지만 포트 자원이 매우 부족하지 않는 한 즉시 다시 사용되지는 않습니다.
따라서 보이는 것은 정상이므로 걱정하지 마세요(버전 v0.10 이상을 사용해야 하는 경우).
v0.10 버전에서는 재활용 포트 기능이 추가되었습니다. 이 버전보다 낮은 경우 포트 번호가 EndPortRange에 도달한 후 Docker

만 다시 시작할 수 있습니다.

참고자료: https://github.com/dotcloud/docker/pull/4949

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿