최근 클라우드 컴퓨팅과 컨테이너화 기술의 급속한 발전으로 Docker는 가장 인기 있는 컨테이너 기술 중 하나가 되었습니다. 그러나 Docker가 널리 사용되고 있음에도 불구하고 Docker 컨테이너를 사용할 때 해결해야 할 몇 가지 일반적인 문제가 여전히 남아 있습니다. 문제 중 하나는 Docker 컨테이너 내에 사용자를 추가할 수 없다는 것입니다.
Docker 컨테이너에 사용자를 추가할 수 없는 이유는 무엇인가요?
먼저 Docker가 내부적으로 어떻게 작동하는지 이해해야 합니다. Docker는 Linux 커널 네임스페이스를 사용하여 프로세스 간 격리를 달성합니다. 이러한 네임스페이스에는 PID 네임스페이스, UTS 네임스페이스, 네트워크 네임스페이스 등이 포함됩니다. 그 중 사용자 네임스페이스는 사용자와 사용자 그룹 ID를 분리하는 데 사용됩니다. 기본적으로 Docker 컨테이너는 호스트 사용자 네임스페이스의 UID 및 GID를 사용합니다. 즉, 새 사용자가 생성되면 컨테이너의 네임스페이스에 해당 UID 및 GID가 없기 때문에 컨테이너에서 useradd
와 같은 명령을 사용하여 사용자를 생성할 수 없습니다. useradd
等命令创建用户,因为再创建一个新用户时,容器内的命名空间中没有对应的UID和GID。
如何在Docker容器内增加用户?
要在Docker容器内增加用户,我们需要进行一些额外的操作。具体来说,我们需要通过修改容器的配置文件来启用用户namespace,并为该用户命名空间指定一个独立的UID和GID,并将容器内的root用户映射到该命名空间的用户。
以Ubuntu为例,在容器内使用以下命令即可启用用户namespace:
sysctl kernel.unprivileged_userns_clone=1
该命令将允许非特权用户对用户命名空间进行克隆(clone)操作。接下来,我们需要为该用户命名空间指定一个独立的UID和GID,并将容器内的root用户映射到该命名空间的用户,使用以下命令:
echo "namespace id range" > /etc/subuid echo "namespace id range" > /etc/subgid
其中,namespace为该用户命名空间的命名空间ID,id为该用户命名空间的初始UID和GID,range为该用户命名空间允许的用户数目。
接下来,我们需要使用adduser
adduser --uid 1000 --gid 1000 myuser이 명령을 사용하면 권한 없는 사용자가 사용자 네임스페이스를 복제할 수 있습니다. 다음으로, 사용자 네임스페이스에 대해 독립적인 UID 및 GID를 지정하고 컨테이너의 루트 사용자를 네임스페이스 사용자에 매핑해야 합니다. 🎜rrreee🎜 여기서 네임스페이스는 사용자 네임스페이스 공간 ID의 이름입니다. , id는 사용자 네임스페이스의 초기 UID와 GID이고, range는 사용자 네임스페이스에 허용되는 사용자 수입니다. 🎜🎜다음으로
adduser
명령을 사용하여 새 사용자를 생성하고 해당 사용자를 컨테이너에 추가해야 합니다. 🎜rrreee🎜 그중 --uid 및 --gid 매개변수는 사용자를 컨테이너에 추가합니다. 이전에 정의한 별도의 UID 및 GID 네임스페이스에 있습니다. 🎜🎜요약🎜🎜Docker 컨테이너에 사용자를 추가할 수 없는 문제는 사용자 네임스페이스를 활성화하고 네임스페이스에 대해 독립적인 UID 및 GID를 지정하면 해결할 수 있습니다. 이를 위해서는 약간의 추가 작업이 필요하지만 안전성과 격리성이 향상되면 그만한 가치가 있습니다. 컨테이너 기술이 계속해서 발전함에 따라 미래에는 더 간단하고 편리한 솔루션이 등장할 것이라고 믿습니다. 🎜위 내용은 Docker 컨테이너에 사용자를 추가할 수 없습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!