실행중인 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.