실행중인 Docker 컨테이너의 IP 주소를 얻는 방법


96

Mac 용 Docker를 사용하고 있습니다. Docker 컨테이너에서 nodejs 기반 마이크로 서비스를 실행하고 있습니다. 브라우저를 통해 노드 마이크로 서비스를 테스트하고 싶습니다. 실행중인 Docker 컨테이너의 IP 주소를 얻는 방법은 무엇입니까?


답변:


116

호스트에서 컨테이너로 포트를 매핑하지 않으려면 컨테이너의 도커 범위 ip에 직접 액세스 할 수 있습니다. 이 범위는 기본적으로 호스트에서만 액세스됩니다. 다음을 수행하여 컨테이너 네트워크 데이터를 확인할 수 있습니다.

docker inspect <containerNameOrId>

아마도 필터링하는 것이 더 좋습니다.

docker inspect <containerNameOrId> | grep '"IPAddress"' | head -n 1

일반적으로 기본 도커 IP 범위는 172.17.0.0/16. 모든 것이 정상이고 특별한 네트워크 옵션을 지정하지 않은 경우 호스트가 있어야 172.17.0.1하고 첫 번째 컨테이너가 있어야합니다 172.17.0.2.

"bash 속임수"대신 docker 기능을 사용하는 또 다른 우아한 방법을 편집하십시오 .

docker inspect -f "{{ .NetworkSettings.IPAddress }}" <containerNameOrId>

7
내부 IP에 대해 이야기하고 있으며 당면한 질문과 관련이 없습니다. 귀하의 답변은 독자에게 혼란을 제공합니다. IP는 Docker가 실행중인 시스템의 IP이기 때문입니다. 어느 그냥 localhost:)
데이비드 가티

당신은 잘못. OP는 외부에서 액세스 할 수 있어야하는 마이크로 서비스에 대해 아무것도 지정하지 않았습니다. 그는 "브라우저를 통한 테스트 노드 마이크로 서비스"라고만 말했으며 이것은 http://172.17.0.2:anyPort호스트에서 사용 하는 제안 된 방법으로 수행 할 수 있습니다 . 물론 호스트에서 localhost를 사용하여 액세스하려면 포트를 매핑해야합니다. OP가 원하는 것을 볼 수 있습니다.
OscarAkaElvis

3
호스트에서 컨테이너 내부의 내부 IP에 액세스 할 수 있다는 말입니까? 그것은 물리적으로 불가능하며 완전히 다른 네트워크입니다. 확인했을뿐만 아니라 예, 도커 컨테이너의 172.17.0.7에 액세스 할 수 없습니다. 네트워크 스캐너로 호스트 컴퓨터를 스캔하면 모든 도커 경쟁자를 볼 수 있어야합니다. 다시. 나는 그것이 작동하지 않아야한다는 것을 알고 있으며, 나는 당신이 말하는 것을 테스트했으며 (당신은 결코 알지 못합니다) 작동하지 않습니다. 그렇다면 설명에 핵심 부분이 누락되어 있습니까?
David Gatti

컨테이너는 호스트에서 액세스 할 수 있습니다. 직접 시도해보세요 ... 몇 가지 힌트를 드릴게요. 1. 실행 컨테이너를 다운로드합니다. docker run --name struts --rm -i tomcat2. 컨테이너의 IP를 가져 docker inspect struts | grep '"IPAddress"' | head -n 1옵니다 ( 하나만있는 경우) : 3. 호스트의 브라우저에서 엽니 다 http://x.x.x.x:8080. Apache Tomcat 기본 페이지를 볼 수 있습니다.
OscarAkaElvis

1
나는 -p 사용하여 매핑 포트를 사용하지 않고 컨테이너에서 웹 응용 프로그램에 액세스 할 수 없습니다
bilal.haider

22

--format옵션을 사용 하여 전체 컨테이너 정보 대신 IP 주소 만 가져옵니다.

sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' <CONTAINER ID>

4
Windows 호스트에서는 작은 따옴표 대신 큰 따옴표를 사용하십시오. 예 : sudo docker inspect --format "{{.NetworkSettings.IPAddress}}"<CONTAINER ID 또는 NAME> 참조 : link
Vineet Sajwan

1
컨테이너에 대한 정보의 새로운 형식 여기
이고르

20

최신 Docker 엔진의 경우 다음 명령을 사용하십시오.

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id

오래된 엔진의 경우 다음을 사용하십시오.

docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id

원래 OP 영역에서 @sanyash의 의견에 언급되고 연결되었습니다.
Jesse Chisholm

템플릿 구문 분석 오류 : 템플릿 : : 1 : 명령에서 예기치 않은 닫히지 않은 작업
gmlvsv

11

용기 내에서 바로 얻고 싶다면 시도해 볼 수 있습니다.

ip a | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | grep 172.17

5

플래그로 컨테이너를 시작할 수 있습니다. -P . 이것은 이미지의 노출 된 포트에 임의의 포트를 "할당"합니다.

함께 docker port <container id>사용하면 무작위로 선택이 끝난 포트를 볼 수 있습니다. 그러면를 통해 액세스 할 수 있습니다 localhost:port.



-3

해당 호스트 시스템 외부에서 도커의 IP에 액세스 할 수 없습니다. 브라우저가 다른 컴퓨터에있는 경우 전달하여 호스트 포트를 컨테이너 포트에 매핑하는 것이 더 좋습니다.-p 8080:8080 실행 명령 .

전달 -p하면 호스트 포트를 컨테이너 포트에 매핑 할 수 있으며 프록시는 해당 호스트 포트에 대한 모든 트래픽을 지정된 컨테이너 포트로 전달하도록 설정됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.