2017-12-07 5 views
0

컨테이너에 라우팅 가능한 IP를 제공하려고합니다. 내 로컬 네트워크는 192.168.1.0/24이고 컨테이너를 제공하기 위해 192.168.1.17/29를 사용하고 싶습니다.도커 컨테이너에 라우팅 가능 IP를 제공하는 방법 (호스트와 다름)?

목표는 각 컨테이너에 고유 한 IP를 갖도록하는 것입니다. 이 방법으로 두 컨테이너가 포트 80에서 웹 서버를 실행하는 경우 로컬 호스트의 다른 호스트에서 포트 80의 고유 IP를 통해 공유 호스트 IP의 다른 포트에 매핑하는 대신 직접 연결할 수 있습니다.

자체 네트워크 카드가있는 물리적 시스템이 각각 네트워크에서 192.168.1.xxx IP를 구분하는 것과 비슷합니다. 다음 산출

docker network create --subnet 192.168.1.0/24 --ip-range 192.168.1.17/29 --gateway 192.168.1.1 test_nw 

:

나는이 시도 컨테이너 내에서이 경우

$ docker network inspect test_nw 
[ 
    { 
     "Name": "test_nw", 
     "Id": "96bd574300059ef3710527a9bd0b3010d3b3c22d8de321ff459697eda96ab5e6", 
     "Created": "2017-12-06T21:50:08.591070587-05:00", 
     "Scope": "local", 
     "Driver": "bridge", 
     "EnableIPv6": false, 
     "IPAM": { 
      "Driver": "default", 
      "Options": {}, 
      "Config": [ 
       { 
        "Subnet": "192.168.1.0/24", 
        "IPRange": "192.168.1.17/29", 
        "Gateway": "192.168.1.1" 
       } 
      ] 
     }, 
     "Internal": false, 
     "Attachable": false, 
     "Ingress": false, 
     "ConfigFrom": { 
      "Network": "" 
     }, 
     "ConfigOnly": false, 
     "Containers": {}, 
     "Options": {}, 
     "Labels": {} 
    } 
] 

을, 나는 192.168.1.1를 Ping 할 수 있지만, 나는 아무 것도 Ping 할 수 인터넷 (IP 또는 호스트 이름으로), 로컬 네트워크의 다른 장치에도 ping을 실행할 수 없습니다 (192.168.1.2는 존재하지만 연결할 수 없습니다)

호스트 (내 랩톱)는 인터넷 또는 내 로컬 네트워크에서 더 이상이 네트워크를 제거 할 때까지 docker network rm.

분명히 뭔가 빠져 있지만 분명히 이해할 수 없습니다. 내가하려는 일을 성취 할 수있는 방법이 있습니까?

답변

0

두 개의 컨테이너가 포트 80에서 웹 서버를 실행하는 경우이 방법, 내가 공유 호스트의 IP에서 다른 포트로 매핑하는 대신 포트 80에서 고유 IP를 통해 로컬 네트워크의 다른 호스트에서 직접 도달 할 수 .

아마도이 문제를 잘못 생각한 것 같습니다. 공유 호스트 IP의 다른 포트에 맵핑 할 필요는 없습니다. 이 문제를 해결하는 가장 일반적인 방법은 호스트에 여러 개의 IP 주소를 할당하는 것입니다. 나의 호스트가 192.168.1.100 경우 예를 들어, 나는 몇 가지 추가 주소를 추가 할 수 있습니다 :

이제
ip addr add 192.168.1.200/24 dev eth0 
ip addr add 192.168.1.201/24 dev eth0 

나는 하나 개의 웹 서버를 시작하고 첫 번째 IP 주소에 바인딩 할 수 있습니다

docker run -p 192.168.1.200:80:80 mywebserver1 

그리고 시작할 수 있습니다 다른 웹 서버를 만들고 다른 주소의 포트 80에 매핑하십시오.

docker run -p 192.168.1.201:80:80 mywebserver2 

이것은 귀하의 목표를 충족시키는 것 같습니다.

+0

재미있는 점은, 나는 그렇게하기 위해 도커의 일이라고 생각했습니다. – springloaded

+0

이것은 포트 매핑에서만 작동합니다. https://blog.jessfraz.com/post/ips-for-all-the-things/ 컨테이너가 공인 IP를 얻지 못하는 경우에도이를 달성하는 방법은 무엇입니까? 포트 매핑이 필요합니까? – springloaded