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


1409

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

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


28
다른 멍청한 놈들이 실수하지 않도록 컨테이너 대신 이미지에서 IP를 얻으려고했습니다. CID 또는 컨테이너 ID를 가져 와서 쿼리하십시오. 'docker ps'를 통한 CID입니다.
Paul Gregoire

그 반대로하는 방법? 컨테이너에서 호스트 IP 또는 전화?
Somnath Muluk

답변:


2328

--format의 옵션은 inspect구조에 온다.

최신 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에있는 경우 중괄호 주위 "에 작은 따옴표 대신 큰 따옴표 를 사용 '하십시오.


34
이것은 훨씬 더 나은 솔루션입니다. 가능하면 필요한 것을 요청하십시오!
MikeyB

8
흠. <no value>Fig / Boot2Docker를 사용하여 Mac 에서 응답 받기
cevaris

2
@cevaris <no value>실행 중이 아닌 컨테이너에 대해 이것을 실행하면 얻을 수 있습니다. 이 작업을 수행하기 전에 컨테이너가 실행 중인지 확인하십시오.
TheJediCowboy

55
!경고! 더 이상 작동하지 않습니다. 새로운 형식은 컨테이너에 따라 다르며 형식을 따릅니다 {{ .NetworkSettings.Networks.$network.IPAddress }}. 기본은 브리지 인 것처럼 보이지만 docker-compose 아래에는 앱 이름에 따라 달라지는 특정 이름이 있습니다 (--project-name 플래그에서 생각하지만 네트워킹 구성 유형에 따라 다릅니다. 설정했습니다). 나는 여기에 답변에 완전한 답변을 썼습니다. stackoverflow.com/questions/17157721/…
Dunk

5
어쩌면 나는 졸린 양이지만 큰 따옴표에 대한 경고는 대담하고 눈에 띄지 않아 내 관심을 끌었습니다. Linux와 Windows로 명확하게 표시된 두 가지 예를 제공 할 수 있습니다. 나는 문자 그대로 예제를 입력하고 작은 따옴표도 사용 하는 문서 확인한 다음 Google에 오류를 표시했습니다. 나는 혼자가 아니라고 확신합니다.
Wyck

513

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

예를 들면 다음과 같습니다.

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

67
ip를 추출하기 위해 다음과 같은 작업을 수행 할 수 있습니다. docker inspect $CID | grep IPAddress | cut -d '"' -f 4:)
creack

9
이 셸 별명을 모두 정리하면 모든 컨테이너 ID와 해당 IP를 나열해야합니다.alias dockerip='docker ps | tail -n +2 | while read cid b; do echo -n "$cid\t"; docker inspect $cid | grep IPAddress | cut -d \" -f 4; done'
ko-dos

64
@ user3119830에서 언급했듯이 새로운 검사 옵션이 있습니다. 이제 다음과 같이 Ip를 더 쉽게 얻을 수 있습니다.docker inspect -format '{{ .NetworkSettings.IPAddress }}' ${CID}
creack

16
그냥 참고하십시오. 단일 형식의 대시 옵션은 더 이상 사용되지 않으므로 -format은 --format이됩니다.
jamtur01

7
docker inspect -format '{{ .NetworkSettings.IPAddress }}' ${CID}새로운 구문입니다. -format더 이상 사용되지 않습니다 --format.
Devy

408

먼저 컨테이너 ID를 얻으십시오.

docker ps

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

컨테이너 ID를 사용하여 다음을 실행하십시오.

docker inspect <container ID>

하단의 "NetworkSettings"아래에 "IPAddress"가 있습니다.

아니면 그냥 :

docker inspect <container id> | grep "IPAddress"

5
너무의 나쁜, 내 인스턴스 중 하나에 (시작 docker run -it MYCONTAINER /bin/bash)의 출력은 inspect어떤 부분이 없습니다 NetworkSettings!
Eric

3
Windows 10에서는 작동하지 않습니다. ipconfig를 사용하여 DockerNAT의 IP 주소를 찾아야합니다.
ntiedt

@Eric 또한 네트워크 브리지를 검사 할 수 있습니다.docker network inspect bridge | grep Gateway | grep -o -E '[0-9.]+'
Tomasz Kapłoński

5
... | grep IPIP를 얻는 데 필요한 모든 형식 세부 사항에 대한 솔루션을 매우 선호합니다 . +1
d8aninja

1
@Eric- 이미지컨테이너 를 혼동했습니다 . 명령은 실제로 ( 컨테이너 이름 이 아님 )입니다. 당신이 하면 이미지 에 대한 정적 정보를 얻을 수 있습니다. 실행중인 컨테이너 의 이름을 찾아야합니다 (또는 다른 사람들이 제안한대로 ID를 사용하십시오). 내 시스템에서 해당 이미지에서 만든 첫 번째 컨테이너는 기본적으로 name 으로 설정되어 있으므로 NetworkSettings도 있습니다. docker run -it MYIMAGEdocker inspect MYIMAGEMYIMAGE_1docker inspect MYIMAGE_1
ToolmakerSteve

216
docker inspect CONTAINER_ID | grep "IPAddress"

-i사건을 무시하기 위해 grep에 추가 하면 다음과 같이 작동합니다.

docker inspect CONTAINER_ID | grep -i "IPaDDreSS"

5
이 답변은 다른 22와 어떻게 더 좋거나 다른가요?
sds

이것은 최선의 대답이 아닙니다. WouterD의 답변은 당신이 찾고있는 답변입니다.
M.Vanderlee

7
@ M.Vanderlee이 답변에는 기억하기 쉬운 명령이 있으므로 IMO에 더 잘 대답합니다.
huysentruitw

1
@WouterHuysentruit 물론이지만 여러 항목과 실제 ​​"IPAddress"텍스트가 표시됩니다. 추가 조작 없이는 스크립트에서 사용할 수 없습니다.
M.Vanderlee

네가 옳아. 질문의 맥락에서 다른 대답이 더 적합합니다.
huysentruitw

133

단 하나의 명령으로 모든 컨테이너 이름과 해당 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

5
나는 이것을 정말로 좋아하지만 Docker Compose에서도 작동하지 않으며 자체 네트워크를 가지고있는 것과 관련이 있습니다. 대신 변경 {{.NetworkSettings.IPAddress }}{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}
clockworkgeek

내가 사용하는 변형은 다음과 같습니다 docker inspect --format '{{ .NetworkSettings.IPAddress }}' $(docker ps -aq | xargs) | sed -e '/^$/d'.. 이 sed(1)컨테이너는 존재하지만 IP 주소가없는 컨테이너의 빈 줄을 제거합니다.
NYCeyes

97

이 쉘 스크립트를 귀하 ~/.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}}' "$@"
}

5
Template parsing error: template: :1:19: executing "" at <.NetworkSettings.IPA...>: map has no entry for key "NetworkSettings"
saiyancoder

이것은 나를 위해 작동하지만, 필요합니다source ~/.bash_profile
페니 찬

1
실행중인 컨테이너를 검사하지 않고 이미지 만 검사하는 경우이 오류가 발생합니다. 이미지에 IPAddress가 없습니다 ... 끔찍한 오류 메시지, 예
dagelf

37

모든 컨테이너의 IP 주소를 표시하십시오.

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

37

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

1
또는 그냥docker exec [container-name-or-id] ip a
Stephan Richter

의 경우docker exec [container-id or container-name] ipconfig
GreatAndPowerfulOz

27

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

컨테이너 섹션이 비어 있으면 무엇을 의미합니까? 그러나 컨테이너가 작동 중입니다.
StackEdd

24

실행 :

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

컨테이너 ID 값을 사용하십시오.

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

"172.17.0.2"


23

내가 좋아하는 답변 중 일부를 기반으로 모든 IP 주소와 특정 컨테이너에 대한 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

16

이름 별 참조 컨테이너 :

docker run ... --name pg-master

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

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

15

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

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
}

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


1
여기에서 Tuong Le의 대답은 stackoverflow.com/questions/17157721/… dip ()에서 네트워크를 지정하지 않아도됩니다. docker inspect --format '{{range .NetworkSettings.Networks}} {{. IPAddress}} {{end} } ' "$ @"
JoanComasFdz

1
@JoanComasFdz 당신은 너무 많은 감사를 저장했습니다!
Chagai Friedlander

14

빠른 답변은 다음과 같습니다.

컨테이너 이름 또는 ID를 얻으십시오.

docker container ls

그런 다음 IP를 얻으십시오.

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

포트를 얻으십시오 :

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

13

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

특정 컨테이너의 IP 주소를 검사하려면 -f"format"에 대해 다음 명령을 실행해야합니다 .

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

컨테이너 ID 또는 이름의 경우 명령을 실행할 수 있습니다

docker container ls

실행중인 모든 컨테이너가 나열됩니다.


1
이것은 매우 유용합니다. 내 Go 쿼리를 작성하기위한 설명서는 어디서 찾을 수 있습니까?
Michael Hoffmann

12

다음은 docker inspect containerJSON 출력을 데이터 소스로 사용하여 오늘 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

스크립트에서
python2.7로

Gist를 업데이트하고 가능한 한 여기에 게시하겠습니다. 실제로이 래퍼는 Python 2.7 용으로 설계되었습니다. 피드백을 주셔서 감사합니다!
ivanleoncz

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

9

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'

1
사용 - 그건 상당히 단순화 할 수 docker ps -q을 피하기 위해 tail, 그리고 --formatgrep을하지 않도록합니다. 또한 docker inspect쉘에서 루프하지 않고 여러 컨테이너 ID를 전달할 수 있습니다 .
Bryan

1
docker ps -q컨테이너의 숫자 ID 만 표시하지만 이름을 사용하는 것이 좋습니다. tail첫 번째 줄 (테이블 헤더)을 제거하고 여전히 필요합니다. --format그래도 사용할 수 있습니다 : docker ps | tail -n +2 | while read -a a; do name=${a[$((${#a[@]}-1))]}; echo -ne "$name\t"; docker inspect --format="{{.NetworkSettings.IPAddress}}" $name | cut -d \" -f 4; done. 그러나 그것은 크게 개선 된 것처럼 보이지는 않습니다 grep. 더 읽기 쉬운 IMO였습니다.
Marco Roy

1
컨테이너 이름과 함께 한 줄로 IP를 먼저 나열하는 약간 변경된 버전 : docker ps | 꼬리 -n +2 | 읽는 동안 -aa; 이름 = $ {a [$ (($ {# a [@]}-1))]}; 도커 검사 $ name | grep "IPAddress. * [0-9] \ +"| cut -d \ "-f 4 | tr"\ n "" "; echo -e"\ t $ {name} "; 완료
Gilead

종료 :docker inspect $cid | grep IPAddress | cut -d '"' -f 4 | tail -n 1
antogerva

9

이 간단한 방법을 사용합니다

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

예 :

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

7

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

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

저에게 IP 주소는 "호스트 이름 / 포트"탭에 있었지만 그럼에도 불구하고 매우 유용한 답변이었습니다! 주 docker inspect당신이 고정 표시기 도구 상자를 실행할 때 작동하지 않습니다. IP 주소를보고하지만 서비스에서 사용할 올바른 주소는 아닙니다.
Göran Roseen

7

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

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

산출:

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

7

노트!!! 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 가지 대안 "을 참조하십시오.


6

Windows 10의 경우 :

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

5

호스트의 모든 컨테이너 IP가 표시됩니다.

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

5

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

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

5

완전성을 위해 :

나는 --format옵션을 정말로 좋아 하지만 처음에는 그것을 알지 못했기 때문에 동일한 결과를 얻기 위해 간단한 Python one-liner를 사용했습니다.

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

이것은 가장 멋진 답변입니다. - 또한 다른 답변을 참조 stackoverflow.com/a/36306632/432903
prayagupd

5

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

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

4

사용하다:

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

이것은 실제 단일 행 적절한 명령입니다. 내가 가진 것입니다. $ docker inspect c4591485328d | grep IPAddress | grep -v null| cut -d '"' -f 4 | head -1 172.17.0.2
Jayant Bhawal

4

들어 윈도우 용기 사용

docker exec <container> ipconfig

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

docker ps컨테이너의 ID를 찾는 데 사용할 수 있습니다 .


“—rm”을 사용하십시오. 그렇지 않으면 삭제되지 않은 레이어가있는 하드 드라이브 공간을 천천히 소모합니다. 거의 모든 경우에“—rm”과“run”을 연결하는 것이 좋습니다.
Contango

@Contango : 'docker exec'는 이미 실행중인 컨테이너에서 명령을 실행합니다. --rm 스위치가 없습니다. docs.docker.com/engine/reference/commandline/exec
kirodge

4

컨테이너 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에 대한 모든 정보를 찾을 수 있습니다.


4
이 링크는 질문에 대답 할 수 있지만 링크 오버플로에서는 링크 만 답변을 사용하지 않는 것이 좋습니다. 링크의 중요한 부분을 가져 와서 답변에 넣으면이 답변을 개선 할 수 있습니다. 이렇게하면 링크가 변경 되어도 답변이 여전히 답변이됩니다 또는 제거 :)
WhatsThePoint
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.