도커(Docker) : Privileged 모드로 실행하기

반응형

 

도커(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 Documentation

Docker run reference Docker runs processes in isolated containers. A container is a process which runs on a host. The host may be local or remote. When an operator executes...

docs.docker.com


파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음

댓글

Designed by JB FACTORY