Docker container IP 확인
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에 접속하는 명령어로 자세한 내용은 아래 포스트 참고.
접속하면 위와 같이 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