ㅍㅍㅋㄷ

Docker container IP 확인 본문

IT/Docker

Docker container IP 확인

클쏭 2016. 5. 18. 16:45

Docker Container IP 확인


Docker의 Network 환경은 Linux namespace 라는 기술을 이용해 구현되었으며, Container들은 각각의 독립된 환경을 제공 받게 된다. 

Container들은 기본적으로 한개의 ethernet interface 와 private IP를 자동으로 할당 받는다. 


자세한 내용은 아래 포스팅으로-

Docker Network 구조(1) - docker0와 container network 구조 )


Container가 제공 받은 Private IP는 초기 CIDR 설정에 따라 IP를 자동으로 할당 받게 된다.

그런데 이 IP는 docker engine이 자동으로 할당해 주기 때문에 container가 생성 된 후에야 확인이 가능하다.  


여기서 간단히 Container가 할당 받은 IP를 확인 하는 방법을 소개 한다. 




1. docker inspect 이용


   docker inspect 는 container or image 의 low level 정보를 가져오는 명령어이다. 기본적인 출력 format은 json 형태이다. 

  

root@~~# docker inspect CONTAINER_ID

[

    {

        "Id": "8aadfb1607f5065070b96cbe5e4259312038cc0e53b2ba62e4ea9da805691574",

        "Created": "2016-05-18T07:16:27.598816826Z",

        "Path": "httpd-foreground",

        "Args": [],

        "State": {

            "Status": "running",

            "Running": true,

            "Paused": false,

            "Restarting": false,

            "OOMKilled": false,

            "Dead": false,

            "Pid": 4925,

            "ExitCode": 0,

            "Error": "",

            "StartedAt": "2016-05-18T07:20:00.233063636Z",

            "FinishedAt": "2016-05-18T07:19:49.731866179Z"

        },


.....(중략)


    이 정보 중 key값이 IPAddress 라는 정보가 있는데 이게 container에 할당된 Private IP 이다. NetworkSettings 하위에 있다. 


....

        "NetworkSettings": {

            "Bridge": "",

            "SandboxID": "fb1b34f4f9022",

            "HairpinMode": false,

            "LinkLocalIPv6Address": "",

            "LinkLocalIPv6PrefixLen": 0,

            "Ports": {

                "80/tcp": null

            },

            "SandboxKey": "/var/run/docker/netns/fb1b34f4f902",

            "SecondaryIPAddresses": null,

            "SecondaryIPv6Addresses": null,

            "EndpointID": "b43eab8834dc5b",

            "Gateway": "172.17.0.1",

            "GlobalIPv6Address": "",

            "GlobalIPv6PrefixLen": 0,

            "IPAddress": "172.17.0.2",


....(중략)


  간단히 IP정보만 얻어 오려면 다음과 같이 하면 된다. 


root@~~# docker inspect -f "{{ .NetworkSettings.IPAddress }}" CONTAINER_ID




2. docker exec를 이용한 확인


docker exec 는 docker host에서 container 내부에 명령을 보내 출력하는 명령어이다. 


root@~~# docker exec CONTAINER_ID ip addr show eth0

16: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 

    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff

    inet 172.17.0.2/16 scope global eth0

       valid_lft forever preferred_lft forever

    inet6 fe80::42:acff:fe11:2/64 scope link 

       valid_lft forever preferred_lft forever


위 명령어는 특정 container에 "ip addr show eth0" 명령어를 보내 eth0에 할당된 IP를 확인하는 명령어 이다. 





3. docker 에 접속해 IP 알아내기


마지막으로, container에 shell로 접속한 후 직접 IP 를 확인해 보는 방법도 있다. 


root@~~# docker exec -it CONTAINER_ID /bin/bash

root@8aadfb1607f5#


해당 명령은 container에 접속하는 명령어로 자세한 내용은 아래 포스트 참고.

( docker container에 접속하기 )


접속하면 위와 같이 hostname이 container ID로 바뀐것을 확인할 수 있다. 

container에 접속 한 후 2번 방법처럼 ip addr show eth0 로 확인하면 끝


root@8aadfb1607f5# ip addr show eth0

16: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 

    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff

    inet 172.17.0.2/16 scope global eth0

       valid_lft forever preferred_lft forever

    inet6 fe80::42:acff:fe11:2/64 scope link 

       valid_lft forever preferred_lft forever


Comments