도커(Docker) : Privileged 모드로 실행하기
- 개발환경/Docker
- 2020. 3. 4.
도커(Docker) : Privileged 모드로 실행하기
본 글에서는 도커(Docker) 컨테이너를 Privileged 모드로 실행하는 방법을 소개한다.
Unprivileged 모드 도커 컨테이너
도커 컨테이너는 기본적으로 Unprivileged 모드로 실행되며, 이 모드에서는 시스템 주요 자원에 접근할 수 있는 권한이 부족하기 때문에, 특정 장치 등의 시스템 자원에 접근할 수 없다.
도커 공식 문서에서는 다음과 같이 표현하고 있다.
By default, Docker containers are “unprivileged” and cannot, for example, run a Docker daemon inside a Docker container. This is because by default a container is not allowed to access any devices, but a “privileged” container is given access to all devices (see the documentation on cgroups devices)
예를 들어, 도커 컨테이너를 기본으로(Unprivileged 모드로) 실행하면 네트워크 인터페이스의 활성화/비활성화나 IP 주소의 변경 등이 불가능하다.
다음은 Unprivileged 모드로 실행된 도커 컨테이너에서 eth0 네트워크 인터페이스의 IP 주소를 변경하고 비활성화하고자 했을 때 권한 문제로 실패하는 현상을 보여준다.
root@a5fe3a6a029f:/workspace# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:03
inet addr:172.17.0.3 Bcast:172.17.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:516 (516.0 B) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
root@a5fe3a6a029f:/workspace# ifconfig eth0 192.168.0.1
SIOCSIFADDR: Operation not permitted
SIOCSIFFLAGS: Operation not permitted
root@a5fe3a6a029f:/workspace#
root@a5fe3a6a029f:/workspace# ifconfig eth0 down
SIOCSIFFLAGS: Operation not permitted
root@a5fe3a6a029f:/workspace#
결국 시스템 내 장치 등 주요 자원에 접근하기 위해서는 도커 컨테이너를 Privileged 모드로 실행해 주어야 한다.
컨테이너를 Privileged 모드로 실행하면 시스템의 모든 장치에 접근할 수 있으며 커널의 기능을 대부분 사용할 수 있다.
도커 컨테이너를 Privileged 모드로 실행하기
도커 컨테이너를 Privileged 모드로 실행하기 위해서는 다음과 같이 "--privileged" 옵션을 추가하여 실행한다.
docker run --privileged [IMAGE NAME] [OTHER OPTIONS...]
테스트를 위해 -it 옵션과 함께 도커 컨테이너를 실행해 본다.
docker run -it --privileged ubuntu:18.04
이제 아래와 같이 네트워크 인터페이스 IP 주소 변경, 비활성화 등의 동작을 수행할 수 있다.
root@dc59ab7f0f54:/workspace# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:02
inet addr:172.17.0.2 Bcast:172.17.255.255 Mask:255.255.0.0
inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:40 errors:0 dropped:0 overruns:0 frame:0
TX packets:23 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3204 (3.2 KB) TX bytes:1802 (1.8 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:15 errors:0 dropped:0 overruns:0 frame:0
TX packets:15 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:16056 (16.0 KB) TX bytes:16056 (16.0 KB)
root@dc59ab7f0f54:/workspace#
root@dc59ab7f0f54:/workspace# ifconfig eth0 192.168.0.3
root@dc59ab7f0f54:/workspace#
root@dc59ab7f0f54:/workspace# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:02
inet addr:192.168.0.3 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:40 errors:0 dropped:0 overruns:0 frame:0
TX packets:23 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3204 (3.2 KB) TX bytes:1802 (1.8 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:15 errors:0 dropped:0 overruns:0 frame:0
TX packets:15 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:16056 (16.0 KB) TX bytes:16056 (16.0 KB)
root@dc59ab7f0f54:/workspace#
root@dc59ab7f0f54:/workspace# ifconfig eth0 down
root@dc59ab7f0f54:/workspace#
root@dc59ab7f0f54:/workspace# ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:15 errors:0 dropped:0 overruns:0 frame:0
TX packets:15 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:16056 (16.0 KB) TX bytes:16056 (16.0 KB)
root@dc59ab7f0f54:/workspace#
Privileged 모드에 대한 보다 자세한 내용은 아래 공식 도커 문서 사이트의 Runtime privilege and Linux capabilities 챕터에서 확인할 수 있다.
파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
'개발환경 > Docker' 카테고리의 다른 글
도커(Docker) : TUN 디바이스(/dev/net/tun) 사용하기 (0) | 2021.01.08 |
---|---|
도커(Docker) : 사용자 계정으로 리눅스 컨테이너 실행하기 (0) | 2020.05.07 |
도커(Docker) : 공유 디렉토리(폴더) 연결하기 (0) | 2020.03.10 |
도커(Docker) : 쉘 사용하기 (0) | 2020.03.10 |
도커(Docker) : 종료된 컨테이너 제거하기 (0) | 2020.03.06 |
도커(Docker) : MAC 주소 설정(변경)하기 (0) | 2020.03.06 |
도커(Docker) : 포트 포워딩 설정(포트 맵핑)하기 (4) | 2020.03.05 |
도커(Docker) : IPv6 기능 활성화 하기 (0) | 2020.03.04 |