etc./StackOverFlow

호스트에서 Docker 컨테이너의 IP 주소를 얻는 방법

청렴결백한 만능 재주꾼 2022. 1. 6. 11:11
반응형

질문자 :Murali Allada


새 컨테이너가 생성된 후 호스트에서 바로 컨테이너의 IP 주소를 가져오기 위해 실행할 수 있는 명령이 있습니까?

기본적으로 Docker가 컨테이너를 생성하면 자체 코드 배포 및 컨테이너 구성 스크립트를 실행하고 싶습니다.



inspect--format 옵션이 도움이 됩니다.

최신 Docker 클라이언트 구문은 다음과 같습니다.

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

이전 Docker 클라이언트 구문은 다음과 같습니다.

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

이 명령은 Docker 컨테이너의 IP 주소를 반환합니다.

주석에서 언급했듯이 Windows를 사용하는 경우 중괄호 주위에 ' 작은 따옴표 대신 "


WouterD

docker inspect <container id> 사용할 수 있습니다.

예를 들어:

 CID=$(docker run -d -p 4321 base nc -lk 4321); docker inspect $CID

creack

먼저 컨테이너 ID를 가져옵니다.

 docker ps

(첫 번째 열은 컨테이너 ID입니다)

컨테이너 ID를 사용하여 다음을 실행합니다.

 docker inspect <container ID>

하단의 "NetworkSettings"에서 "IPAddress"를 찾을 수 있습니다.

또는 다음을 수행하십시오.

 docker inspect <container id> | grep "IPAddress"

Krunal

docker inspect CONTAINER_ID | grep "IPAddress"

대소 문자를 무시하기 위해 grep에 -i 를 추가하면 다음도 작동합니다.

 docker inspect CONTAINER_ID | grep -i "IPaDDreSS"

nPcomp

단 하나의 명령으로 모든 컨테이너 이름과 해당 IP 주소를 가져옵니다.

 docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)

docker-compose 사용하는 경우 명령은 다음과 같습니다.

 docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

출력은 다음과 같습니다.

 /containerA - 172.17.0.4 /containerB - 172.17.0.3 /containerC - 172.17.0.2

Hemerson Varela

~/.bashrc 또는 관련 파일에 다음 셸 스크립트를 추가합니다.

 docker-ip() { docker inspect --format '{{ .NetworkSettings.IPAddress }}' "$@" }

그런 다음 컨테이너의 IP 주소를 얻으려면 다음을 수행하십시오.

 docker-ip YOUR_CONTAINER_ID

새 버전의 Docker의 경우 다음을 사용하십시오.

 docker-ip() { docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$@" }

Tuong Le

Docker 1.3 이상에서는 다음을 사용하여 확인할 수도 있습니다.

실행 중인 Docker(Linux)를 입력합니다.

 docker exec [container-id or container-name] cat /etc/hosts 172.17.0.26 d8bc98fa4088 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.17 mysql

윈도우의 경우:

 docker exec [container-id or container-name] ipconfig

Jake W

모든 컨테이너의 IP 주소 표시:

 docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

zhouji

Docker 버전 1.10.3부터 빌드 20f81dd

Docker에 달리 지정하지 않는 한 Docker는 항상 브리지 네트워크에서 컨테이너를 시작합니다. 따라서 아래에서 이 명령을 시도할 수 있습니다.

 docker network inspect bridge

그런 다음 실행 중인 컨테이너의 IP 주소를 표시하는 컨테이너 섹션을 반환해야 합니다.

 [ { "Name": "bridge", "Id": "40561e7d29a08b2eb81fe7b02736f44da6c0daae54ca3486f75bfa81c83507a0", "Scope": "local", "Driver": "bridge", "IPAM": { "Driver": "default", "Options": null, "Config": [ { "Subnet": "172.17.0.0/16" } ] }, "Containers": { "025d191991083e21761eb5a56729f61d7c5612a520269e548d0136e084ecd32a": { "Name": "drunk_leavitt", "EndpointID": "9f6f630a1743bd9184f30b37795590f13d87299fe39c8969294c8a353a8c97b3", "IPv4Address": "172.17.0.2/16", "IPv6Address": "" } }, "Options": { "com.docker.network.bridge.default_bridge": "true", "com.docker.network.bridge.enable_icc": "true", "com.docker.network.bridge.enable_ip_masquerade": "true", "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", "com.docker.network.bridge.name": "docker0", "com.docker.network.driver.mtu": "1500" } } ]

Athena

실행하다:

 docker ps -a

그러면 활성 도커 이미지가 표시됩니다.

 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3b733ae18c1c parzee/database "/usr/lib/postgresql/" 6 minutes ago Up 6 minutes 5432/tcp serene_babbage

CONTAINER ID 값을 사용합니다.

 docker inspect <CONTAINER ID> | grep -w "IPAddress" | awk '{ print $2 }' | head -n 1 | cut -d "," -f1

"172.17.0.2"


gogasca

내가 좋아하는 답변 중 일부를 기반으로 모든 IP 주소와 특정 컨테이너에 대한 다른 주소를 가져오는 기능으로 병합하기로 결정했습니다. 그들은 이제 내 .bashrc 파일에 있습니다.

 docker-ips() { docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq) } docker-ip() { docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$@" }

첫 번째 명령은 모든 컨테이너의 IP 주소를 제공하고 두 번째 명령은 특정 컨테이너의 IP 주소를 제공합니다.

 docker-ips docker-ip YOUR_CONTAINER_ID

silgon

다음은 빠른 작업 답변입니다.

컨테이너 이름 또는 ID를 가져옵니다.

 docker container ls

그런 다음 IP를 가져옵니다.

 docker inspect <container_ID Or container_name> |grep 'IPAddress'

포트 가져오기:

 docker inspect <container_ID Or container_name> |grep 'Port'

Benyamin Jafari

내 대답:

 docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} %tab% {{.Name}}' $(docker ps -aq ) | sed 's#%tab%#\t#g' | sed 's#/##g' | sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n

또한 bash 별칭으로:

 docker-ips() { docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} %tab% {{.Name}}' $(docker ps -aq) | sed 's#%tab%#\t#g' | sed 's#/##g' | sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n }

출력은 IP 주소별로 정렬되고 탭으로 구분됩니다.

 # docker-ips 172.18.0.2 memcached 172.18.0.3 nginx 172.18.0.4 fpm-backup 172.18.0.5 dns 172.18.0.6 fpm-beta 172.18.0.7 exim 172.18.0.8 fpm-delta 172.18.0.9 mariadb 172.18.0.10 fpm-alpha 172.19.0.2 nextcloud-redis 172.19.0.3 nextcloud-db 172.19.0.4 nextcloud

ctrlbrk

docker-compose 실행되는 모든 컨테이너에서 IP 주소 테이블을 가져오기 위해 다음 Bash 스크립트를 작성했습니다.

 function docker_container_names() { docker ps -a --format "{{.Names}}" | xargs } # Get the IP address of a particular container dip() { local network network='YOUR-NETWORK-HERE' docker inspect --format "{{ .NetworkSettings.Networks.$network.IPAddress }}" "$@" } dipall() { for container_name in $(docker_container_names); do local container_ip=$(dip $container_name) if [[ -n "$container_ip" ]]; then echo $(dip $container_name) " $container_name" fi done | sort -t . -k 3,3n -k 4,4n }

네트워크 변수를 자신의 네트워크 이름으로 변경해야 합니다.


Dunk

Docker는 Go로 작성되었으며 쿼리 목적으로도 Go 구문을 사용합니다.

특정 컨테이너의 IP 주소를 검사하려면 다음 명령을 실행해야 합니다("형식"의 경우 -f

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

컨테이너 ID 또는 이름에 대해 다음 명령을 실행할 수 있습니다.

 docker container ls

실행 중인 모든 컨테이너를 나열합니다.


Rushal Verma

이름별 참조 컨테이너:

 docker run ... --name pg-master

그런 다음 이름으로 IP 주소 주소를 가져옵니다.

 MASTER_HOST=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' pg-master)

Sameer C

docker inspect container JSON 출력을 데이터 소스로 사용하여 오늘 Python에서 개발한 솔루션입니다.

검사해야 할 컨테이너와 인프라가 많고 모든 컨테이너에서 빠르고 예쁜 방식으로 기본 네트워크 정보를 가져와야 합니다. 그래서 이 스크립트를 만들었습니다.

중요: 버전 1.9부터 Docker를 사용하면 여러 네트워크를 만들고 컨테이너에 연결할 수 있습니다.

 #!/usr/bin/python import json import subprocess import sys try: CONTAINER = sys.argv[1] except Exception as e: print "\n\tSpecify the container name, please." print "\t\tEx.: script.py my_container\n" sys.exit(1) # Inspecting container via Subprocess proc = subprocess.Popen(["docker","inspect",CONTAINER], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) out = proc.stdout.read() json_data = json.loads(out)[0] net_dict = {} for network in json_data["NetworkSettings"]["Networks"].keys(): net_dict['mac_addr'] = json_data["NetworkSettings"]["Networks"][network]["MacAddress"] net_dict['ipv4_addr'] = json_data["NetworkSettings"]["Networks"][network]["IPAddress"] net_dict['ipv4_net'] = json_data["NetworkSettings"]["Networks"][network]["IPPrefixLen"] net_dict['ipv4_gtw'] = json_data["NetworkSettings"]["Networks"][network]["Gateway"] net_dict['ipv6_addr'] = json_data["NetworkSettings"]["Networks"][network]["GlobalIPv6Address"] net_dict['ipv6_net'] = json_data["NetworkSettings"]["Networks"][network]["GlobalIPv6PrefixLen"] net_dict['ipv6_gtw'] = json_data["NetworkSettings"]["Networks"][network]["IPv6Gateway"] for item in net_dict: if net_dict[item] == "" or net_dict[item] == 0: net_dict[item] = "null" print "\n[%s]" % network print "\n{}{:>13} {:>14}".format(net_dict['mac_addr'],"IP/NETWORK","GATEWAY") print "--------------------------------------------" print "IPv4 settings:{:>16}/{:<5} {}".format(net_dict['ipv4_addr'],net_dict['ipv4_net'],net_dict['ipv4_gtw']) print "IPv6 settings:{:>16}/{:<5} {}".format(net_dict['ipv6_addr'],net_dict['ipv6_net'],net_dict['ipv6_gtw'])

출력은 다음과 같습니다.

 $ python docker_netinfo.py debian1 [frontend] 02:42:ac:12:00:02 IP/NETWORK GATEWAY -------------------------------------------- IPv4 settings: 172.18.0.2/16 172.18.0.1 IPv6 settings: null/null null [backend] 02:42:ac:13:00:02 IP/NETWORK GATEWAY -------------------------------------------- IPv4 settings: 172.19.0.2/16 172.19.0.1 IPv6 settings: null/null null

ivanleoncz

나는 이 간단한 방법을 사용한다

 docker exec -it <container id or name> hostname -i

 ubuntu@myhost:~$ docker exec -it 3d618ac670fe hostname -i 10.0.1.5

Lemix

docker inspect --format '{{ .NetworkSettings.IPAddress }}' <containername or containerID here>

위의 내용은 컨테이너가 기본 브리지 네트워크에 배포된 경우 작동합니다.

그러나 사용자 지정 브리지 네트워크 또는 오버레이 네트워크를 사용하는 경우 아래에서 더 잘 작동하는 것으로 나타났습니다.

 docker exec <containername or containerID here> /sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'

Aravind Murthy

ko-dos의 답변을 확장하기 위해 다음은 모든 컨테이너 이름과 해당 IP 주소를 나열하는 별칭입니다.

 alias docker-ips='docker ps | tail -n +2 | while read -aa; do name=${a[$((${#a[@]}-1))]}; echo -ne "$name\t"; docker inspect $name | grep IPAddress | cut -d \" -f 4; done'

Marco Roy

노트!!! Docker Compose 사용법:

Docker Compose는 각 클러스터에 대해 격리된 네트워크를 생성하기 때문에 아래 방법은 docker-compose 작동하지 않습니다.


가장 우아하고 쉬운 방법은 현재 가장 많이 투표된 @WouterD의 답변인 쉘 함수를 정의하는 것입니다.

 dockip() { docker inspect --format '{{ .NetworkSettings.IPAddress }}' "$@" }

Docker는 Linux 프로그램과 같은 파일에 컨테이너 ID를 쓸 수 있습니다.

--cidfile=filename 실행하면 Docker는 컨테이너의 ID를 "filename"으로 덤프합니다.

자세한 내용은 " Docker가 PID에 해당하는 섹션을 실행 합니다."를 참조하십시오.

 --cidfile="app.cid": Write the container ID to the file

PID 파일 사용:

  1. --cidfile 매개변수로 컨테이너를 실행 app.cid 파일 내용은 다음과 같습니다.

     a29ac3b9f8aebf66a1ba5989186bd620ea66f1740e9fe6524351e7ace139b909
  2. 파일 콘텐츠를 사용하여 Docker 컨테이너를 검사할 수 있습니다.

     blog-v4 git:(develop) ✗ docker inspect `cat app.cid`
  3. 인라인 Python 스크립트를 사용하여 컨테이너 IP를 추출할 수 있습니다.

     $ docker inspect `cat app.cid` | python -c "import json;import sys;\ sys.stdout.write(json.load(sys.stdin)[0]['NetworkSettings']['IPAddress'])" 172.17.0.2

다음은 보다 인간 친화적인 형태입니다.

 #!/usr/bin/env python # Coding: utf-8 # Save this file like get-docker-ip.py in a folder that in $PATH # Run it with # $ docker inspect <CONTAINER ID> | get-docker-ip.py import json import sys sys.stdout.write(json.load(sys.stdin)[0]['NetworkSettings']['IPAddress'])

자세한 내용은 " Docker 컨테이너 IP 주소 가져오기의 10가지 대안 "을 참조하십시오.


guneysus

Docker 이미지 이름을 기반으로 컨테이너 ID 찾기와 이전 답변 결합:

 docker inspect --format '{{ .NetworkSettings.IPAddress }}' `docker ps | grep $IMAGE_NAME | sed 's/\|/ /' | awk '{print $1}'`

Gene H.

Docker Toolbox를 사용하여 Docker를 설치한 경우 Kitematic 애플리케이션을 사용하여 컨테이너 IP 주소를 가져올 수 있습니다.

  1. 컨테이너 선택
  2. 설정을 클릭하십시오
  3. 포트 탭을 클릭합니다.

Fernando Montoya

컨테이너의 IP 주소와 호스트 포트를 가져오려면:

 docker inspect containerId | awk '/IPAddress/ || /HostPort/'

산출:

 "HostPort": "4200" "HostPort": "4200" "SecondaryIPAddresses": null, "IPAddress": "172.17.0.2", "IPAddress": "172.17.0.2",

Raj Asapu

완전성을 위해:

--format 옵션이 정말 마음에 들지만 처음에는 이를 인식하지 못했기 때문에 동일한 결과를 얻기 위해 간단한 Python 한 줄짜리를 사용했습니다.

 docker inspect <CONTAINER> |python -c 'import json,sys;obj=json.load(sys.stdin);print obj[0]["NetworkSettings"]["IPAddress"]'

sedi

Windows 10의 경우:

 docker inspect --format "{{ .NetworkSettings.IPAddress }}" containerId

Hai Nguyen

그러면 호스트의 모든 컨테이너 IP가 나열됩니다.

 sudo docker ps -aq | while read line; do sudo docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $line ; done

rajdeepbs29

허용되는 답변은 컨테이너당 여러 네트워크에서 제대로 작동하지 않습니다.

 > docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' cc54d96d63ea 172.20.0.4172.18.0.5

다음으로 가장 좋은 답변은 다음과 같습니다.

 > docker inspect cc54d96d63ea | grep "IPAddress" "SecondaryIPAddresses": null, "IPAddress": "", "IPAddress": "172.20.0.4", "IPAddress": "172.18.0.5",

jq 를 사용하여 네트워크 JSON을 구문 분석하고 싶습니다.

 > docker inspect cc54d96d63ea | jq -r 'map(.NetworkSettings.Networks) []' { "proxy": { "IPAMConfig": null, "Links": [ "server1_php_1:php", "server1_php_1:php_1", "server1_php_1:server1_php_1" ], "Aliases": [ "cc54d96d63ea", "web" ], "NetworkID": "7779959d7383e9cef09c970c38c24a1a6ff44695178d314e3cb646bfa30d9935", "EndpointID": "4ac2c26113bf10715048579dd77304008904186d9679cdbc8fcea65eee0bf13b", "Gateway": "172.20.0.1", "IPAddress": "172.20.0.4", "IPPrefixLen": 24, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:14:00:04", "DriverOpts": null }, "webservers": { "IPAMConfig": null, "Links": [ "server1_php_1:php", "server1_php_1:php_1", "server1_php_1:server1_php_1" ], "Aliases": [ "cc54d96d63ea", "web" ], "NetworkID": "907a7fba8816cd0ad89b7f5603bbc91122a2dd99902b504be6af16427c11a0a6", "EndpointID": "7febabe380d040b96b4e795417ba0954a103ac3fd37e9f6110189d9de92fbdae", "Gateway": "172.18.0.1", "IPAddress": "172.18.0.5", "IPPrefixLen": 24, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:12:00:05", "DriverOpts": null } }

모든 컨테이너의 IP 주소를 나열하려면 다음이 됩니다.

 for s in `docker ps -q`; do echo `docker inspect -f "{{.Name}}" ${s}`: docker inspect ${s} | jq -r 'map(.NetworkSettings.Networks) []' | grep "IPAddress"; done /server1_web_1: "IPAddress": "172.20.0.4", "IPAddress": "172.18.0.5", /server1_php_1: "IPAddress": "172.20.0.3", "IPAddress": "172.18.0.4", /docker-gen: "IPAddress": "172.18.0.3", /nginx-proxy: "IPAddress": "172.20.0.2", "IPAddress": "172.18.0.2",

Drakes

Docker는 모든 컨테이너 IP 및 해당 이름을 인쇄하는 데 사용을 검사합니다.

 docker ps -q | xargs -n 1 docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} {{ .Name }}' | sed 's/ \// /'

KARTHIKEYAN.A

스크립트가 아닌 터미널에서 명령 실행을 위한 솔루션을 찾기 위해 Google에서 온 사람들을 위해 자동 완성 및 제안 기능이 있는 대화형 JSON 드릴다운 유틸리티인 " jid "를 사용하면 더 적은 입력으로 동일한 작업을 수행할 수 있습니다. .

 docker inspect $CID | jid

Tab .Net Tab을 입력하면 다음과 같은 내용이 표시됩니다.

 [Filter]> .[0].NetworkSettings { "Bridge": "", "EndpointID": "b69eb8bd4f11d8b172c82f21ab2e501fe532e4997fc007ed1a997750396355d5", "Gateway": "172.17.0.1", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "HairpinMode": false, "IPAddress": "172.17.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:11:00:02", "Networks": { "bridge": { "Aliases": null, "EndpointID": "b69eb8bd4f11d8b172c82f21ab2e501fe532e4997fc007ed1a997750396355d5", "Gateway": "172.17.0.1", "GlobalIPv6Address": "",

.IPA 탭을 입력하면 다음과 같은 내용이 표시됩니다.

 [Filter]> .[0].NetworkSettings.IPAddress "172.17.0.2"

Joel Handwell

출처 : http:www.stackoverflow.com/questions/17157721/how-to-get-a-docker-containers-ip-address-from-the-host

반응형