docker 컨테이너 IP 주소
docker 서비스를 시작하면 "docker:0" 라는 브릿지 인터페이스가 생성된다.
[root@235 network]# systemctl start docker
[root@235 network]# ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
inet6 fe80::42:60ff:fed3:91a8 prefixlen 64 scopeid 0x20<link>
ether 02:42:60:d3:91:a8 txqueuelen 0 (Ethernet)
RX packets 101 bytes 11575 (11.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 14 bytes 1081 (1.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.10.0.235 netmask 255.255.255.0 broadcast 10.10.0.255
inet6 fe80::feaa:14ff:fe76:ef20 prefixlen 64 scopeid 0x20<link>
ether fc:aa:14:76:ef:20 txqueuelen 1000 (Ethernet)
RX packets 881898868 bytes 1029693469981 (958.9 GiB)
RX errors 0 dropped 202284 overruns 0 frame 0
TX packets 795019649 bytes 954119417994 (888.5 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 32005471 bytes 3717989024 (3.4 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 32005471 bytes 3717989024 (3.4 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
원래 서버의 인터페이스인 enp2s0 는 10.10.0.235/24 이고, docker0 는 172.17.0.1/24 이다.
[root@235 ~]# docker run springcloud/eureka
jar:file:/app.jar!/lib/spring-cloud-netflix-eureka-server-1.0.1.BUILD-SNAPSHOT.jar!/static/eureka/css/wro.css
2017-09-11 01:25:09.941 INFO 1 --- [ main] eurekademo.EurekaApplication : Starting EurekaApplication v0.0.1-SNAPSHOT on 5aac65cfc5b8 with PID 1 (/app.jar started by root in /)
2017-09-11 01:25:10.004 INFO 1 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@3bd78ffd: startup date [Mon Sep 11 01:25:10 UTC 2017]; root of context hierarchy
2017-09-11 01:25:10.186 INFO 1 --- [ main] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
2017-09-11 01:25:10.509 INFO 1 --- [ main] eurekademo.EurekaApplication : Started EurekaApplication in 0.869 seconds (JVM running for 1.676)
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.2.3.RELEASE)
2017-09-11 01:25:10.953 ERROR 1 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Could not locate PropertySource: I/O error on GET request for "http://localhost:8888/eureka/default":Connection refused; nested exception is java.net.ConnectException: Connection refused
2017-09-11 01:25:10.969 INFO 1 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@409510fd: startup date [Mon Sep 11 01:25:10 UTC 2017]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@3bd78ffd
2017-09-11 01:25:11.358 WARN 1 --- [ main] .i.s.PathMatchingResourcePatternResolver : Skipping [/tmp/spring-boot-libs/06f98804e83cf4a94380b46591b976b1d17c36b8-eureka-client-1.1.147.jar] because it does not denote a directory
2017-09-11 01:25:11.454 WARN 1 --- [ main] .i.s.PathMatchingResourcePatternResolver : Skipping [/tmp/spring-boot-libs/b8da6470c5c08e33f9ae3737f338b4b81696fa98-eureka-core-1.1.147.jar] because it does not denote a directory
eureka 서버 이미지를 다운받아서 eureka 서버 컨테이너를 띄웠는데, 서버 주소가 localhost 로 나온다. ip 정보를 모르니, 외부에서 접속 테스트를 할수가 없었다. 방법을 찾아보니 inspect 로 컨테이너의 정보(low level) 를 살펴보거나 아니면 실행중인 컨테이너에 쉘로 접속해서 직접 주소를 확인하는 명령어(ifconfig 또는 ip addr)를 실행하는 것이다.
# docker inspect [컨테이너명]
[root@235 ~]# docker inspect peaceful_kare
[
{
"Id": "d687dcb66accdc621fe15fb4245d533f54da8f42d4da3024dc5cd8cf595dd54d",
"Created": "2017-09-11T01:32:06.414766154Z",
"Path": "java",
"Args": [
"-jar",
"/app.jar"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 17465,
"ExitCode": 0,
"Error": "",
"StartedAt": "2017-09-11T01:32:08.318323865Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:3094afcbdf1211d429408f85b9a4469f05ab0db06763b08221be12bbbb3aa03d",
"ResolvConfPath": "/var/lib/docker/containers/d687dcb66accdc621fe15fb4245d533f54da8f42d4da3024dc5cd8cf595dd54d/resolv.conf",
Networks - bridge - IPAddress 가 172.17.0.2 로 나오고, gateway 가 172.17.0.1(: bridge0 의 IP 주소) 인걸로 나온다.
# docker exec -it [컨테이너 이름] bash
※ -i : interative 모드, -t : 가상 터미널(pseudo tty) 지정. 두 모드를 같이 true(-it 옵션만 주면 true 이다)로 안하고 컨테이너 쉘로 들어가서 명령어를 실행하면 결과를 제대로 못 볼 수 있다.(echo 가 안되거나 엉뚱한 tty 로 보내어 지기 때문에)
※ exec : 새로운 컨터이너를 실행하는게 아니라, 현재 실행중인 컨터이너를 확인하기 때문에 exec 를 사용한다. 쉘 상태에서 여러 명령어를 입력하기 위해 bash 를 COMMAND 로 지정한다.
[root@235 docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d687dcb66acc springcloud/eureka "java -jar /app.jar" About a minute ago Up About a minute 8761/tcp peaceful_kare
[root@235 docker]# docker exec springcloud/eureka bash
Error response from daemon: No such container: springcloud/eureka
[root@235 docker]# docker exec -it peaceful_kare bash
root@d687dcb66acc:/#
ip addr 명령어로 eth0 인터페이스에 생성된것을 확인할 수 있고, IP 주소가 172.17.0.2 인 것을 확인할 수 있다. 게이트 웨이는 컨터이너 쉘 안에서 다음 명령어로 확인하자.
root@d687dcb66acc:/# ip route
default via 172.17.0.1 dev eth0
172.17.0.0/16 dev eth0 proto kernel scope link src 172.17.0.2
root@d687dcb66acc:/#
eth0 인터페이스에 대한 default gateway 가 172.17.0.1 로 설정되었다는 것을 알 수 있다. 컨테이너의 주소가 172.17.0.0/16 대역이지만 brige 인터페이스(172.17.0.1) 가 있기 때문에 원래 호스트 서버(10.10.0.235) 에서도 접속할 수 있다.
이제 eureka 서버에 접속해보자.
[root@235 ~]# curl 172.17.0.2:8761
<!doctype html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
<head>
<base href="/">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Eureka</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="eureka/css/wro.css">
</head>
<body id="one">
<nav class="navbar navbar-default" role="navigation">
웹 브라우저로 접속하면 아래와 같은 화면이 나온다.
docker 의 설정을 통해 브릿지 인터페이스 주소를 변경할 수 있는데, 이건 다음 기회에 작성해보기로 한다.(daemon.json 파일 설정)
기본 설정이 아무것도 없으면 172.17.0.1 로 되는거 같다.
[root@235 ~]# cat /etc/docker/daemon.json
{}
참고한 사이트 :
https://docs.docker.com/engine/userguide/networking/default_network/custom-docker0/
'Engineering > Docker' 카테고리의 다른 글
도커 데스크탑 데이터 삭제 (0) | 2023.08.18 |
---|---|
flutter Android toolchain 문제 해결 (1) | 2023.06.18 |
도커 데스크탑 디렉토리 이동 (1) | 2023.03.24 |
docker logs 파일로 저장 (0) | 2022.11.30 |
docker 간단 명령어 정리 on CentOS 7 (0) | 2017.08.31 |