호스트에서 Docker 컨테이너의 IP 주소를 얻는 방법은 무엇입니까?



14 Answers

inspect의 --format 옵션이 구조에옵니다.

Modern Docker 클라이언트 구문 :

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

Old Docker 클라이언트 구문 :

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

IP 주소 만 반환합니다.

Question

새 컨테이너를 만든 후 호스트의 컨테이너 IP 주소를 가져올 수있는 명령이 있습니까?

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




단 하나의 명령으로 모든 컨테이너 이름과 IP 주소를 얻으십시오.

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

docker-compose 를 사용 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



이전 답변을 Docker 이미지 이름을 기반으로 컨테이너 ID를 찾는 것과 결합합니다.

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



컨테이너 ID를 잊었거나 셸 명령으로 조작하고 싶지 않은 경우 Portainer와 같은 UI를 사용하는 것이 좋습니다.

https://portainer.io/

$ docker volume create portainer_data
$ docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

컨테이너 IP에 대한 모든 정보를 찾을 수 있습니다.




docker inspect <container id> | grep "IPAddress"




완전성을 위해 :

--format 옵션을 정말 좋아하지만, 처음에는 그 옵션을 알지 못했기 때문에 동일한 결과를 얻으려면 간단한 파이썬 한 줄자를 사용했습니다 :

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



노트!!! Docker 용 Compose Usage :

Docker Compose는 각 클러스터에 대해 고립 된 네트워크를 생성하기 때문에 아래의 메소드는 docker-compose 과 작동하지 않습니다.

가장 우아하고 쉬운 방법은 셸 함수를 가장 많이 투표 한 답변으로 정의하는 것입니다. @WouterD's :

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

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

--cidfile=filename 매개 변수로 실행하면 Docker는 컨테이너의 ID를이 파일에 덤프합니다.

Docker는 PID에 해당하는 섹션을 실행합니다.

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

PID 파일 사용하기

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

a29ac3b9f8aebf66a1ba5989186bd620ea66f1740e9fe6524351e7ace139b909

  1. 파일 내용을 사용하여 Docker 컨테이너를 검사 할 수 있습니다.

    ➜ blog-v4 git:(develop) ✗ docker inspect `cat app.cid`

  2. 컨테이너 IP 인라인 Python 스크립트 추출하기 :

    $ 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'])

http://networkstatic.net/10-examples-of-how-to-get-docker-container-ip-address/

여기에는 Docker 컨테이너 IP 주소를 가져 오는 10 가지 대안이 있습니다.




ko-dos의 답변을 확장하려면 다음과 같은 별칭을 사용하여 모든 컨테이너 이름과 그 IP 주소를 나열하십시오.

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



이름으로 컨테이너 참조 :

docker run ... --name pg-master

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

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



나는 다음과 같은 Bash 스크립트를 docker-compose 하여 docker-compose 하에 실행중인 모든 컨테이너에서 IP 주소 테이블을 가져왔다.

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
}

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




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}'



Windows 컨테이너의 경우

docker exec <container> ipconfig

여기서 <container><container>이름 또는 ID 입니다.

docker ps 를 사용하여 컨테이너의 ID를 찾을 수 있습니다.




Docker 1.3 이상에서는 다음 단계를 통해 확인할 수도 있습니다.

실행중인 Docker 입력 :

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 버전 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"
        }
    }
]



용도:

docker inspect $CID | grep IPAddress | grep -v null| cut -d '"' -f 4 | head -1



Related



Tags

docker docker