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





15 Answers

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

예:

CID=$(docker run -d -p 4321 base nc -lk 4321);
docker inspect $CID
mysql 외부접속 localhost

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

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




docker inspect CONTAINER_ID | grep "IPAddress"




~/.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}}' "$@"
}



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




이름으로 컨테이너 참조 :

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



Docker Toolbox를 사용하여 Docker를 설치 한 경우 Kitematic 응용 프로그램을 사용하여 컨테이너 IP 주소를 가져올 수 있습니다.

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



Windows 10의 경우 :

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



컨테이너의 IP 주소와 호스트 포트를 가져 오려면 다음을 수행하십시오.

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

산출:

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



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

docker inspect $CID | jid

tab .Net 탭을 입력하면 다음과 같이 표시됩니다.

[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"



Windows 컨테이너의 경우

docker exec <container> ipconfig

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

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




검사가 나를 위해 일하지 않았다. 어쩌면 내가 사용하는 - -net host 및 일부 네임 스페이스.

어쨌든, 나는 이것이 잘 작동하는 것을 알았다.

docker exec -i -t NAME /sbin/ifconfig docker0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'



docker inspect <container id> | grep -i ip

예 :

docker inspect 2b0c4b617a8c | grep -i ip



Related


Tags

docker