2016-10-23 1 views
0

hetzner.de에 약 16 개의 공용 IPv4 주소가있는 서버가 있습니다. 이 같은Docker가 컨테이너를 실행할 때 호스트에 IP 주소를 자동으로 추가 할 수 있습니까?

지금 내가 실행 해요 용기 : 이것은 처음에이 오류를 얻을 것입니다

sudo docker run -d --name test6 -it -p 5.1.2.3:80:80 sunebeck/apache-php 

: 수동으로 호스트의 IP 주소를 추가하여 고정

Error starting userland proxy: listen tcp 5.1.2.3:80: bind: cannot assign requested address. 

:

ip addr add 5.1.2.3 dev eth0 

그 후 의도 한대로 작동하고 서비스는 5.1.2.3에서 포트 80으로 표시됩니다. 그러나 이것을 수동으로 관리하는 것은 약간 번거로운 일입니다.

Docker가 필요에 따라 호스트에서 IP 주소를 자동으로 추가/제거 할 수 있습니까?

답변

1

도커 자체로는 불가능합니다. 컨테이너를 시작할 때 Docker가 생성하는 iptables 규칙과 같은 몇 가지 예외를 제외하고 컨테이너는 호스트의 네트워크 환경을 수정할 수 없습니다. 예를 들어, 사용

아마 호스트가 시작될 때 인터페이스에 모든 주소를 할당하기 위해 마련되는이 문제를 해결하는 가장 쉬운 방법

, 페도라/CentOS는/RHEL에 /etc/sysconfig/network-scripts/ifcfg-<interface>, 데비안/우분투에 /etc/network/interfaces.

이렇게하면 Docker가 실행되기 전에 인터페이스에서 주소를 사용할 수 있으므로 포트 바인딩이 문제없이 작동합니다.

+0

나는 그 일을 생각했지만, 주어진 순간에 다른 호스트가 IP 주소를 사용한다면 실제 서버가 IP 주소를 요구하는 것을 원하지 않습니다. – sune

+0

하지만 물론 래퍼 스크립트를 작성하여 해결할 수 있습니다. 또는 더 큰 설치를 '조정'하기 위해 기존 서비스 중 일부를 사용할 수도 있습니다. – sune

+0

오른쪽; Kubernetes와 같은 오케스트레이션 레이어를 사용하면이를 더 잘 관리하는 데 도움이 될 것이라고 제안하려고했습니다. 나는 당신이 원했던 것과 정확히 똑같은 도구 ([kiwi] (https://github.com/larsks/kiwi)라고 불렀다.)를 작성했지만 결코 튼튼하지 않았으며 현대 버전의 Kubernetes에서는 작동하지 않는다. – larsks

관련 문제