0.9의 출시 이후 Docker는 LXC
자체 실행 환경을 삭제 하고 사용합니다 libcontainer
. 귀하의 질문이 약간 오래되었지만 내 대답이 여전히 사용중인 버전에 적용되는 것 같습니다.
빠른 답변 : 볼륨의 권한을 이해하기 위해의 비유를 할 수 있습니다 mount --bind Host-Dir Container-Dir
. 따라서 요구 사항을 충족하기 위해 기존의 권한 관리 방법을 사용할 수 있습니다. ACL이 필요한 것 같아요 .
긴 답변 : 그래서 당신의 예에서와 같이 우리는 용기라는 이름의이 도크 볼륨과를 /data
.
docker run -tid --name dock -v /usr/container/Databases/:/data \
centos:latest /bin/bash
컨테이너 내부에서 MySQL 서버는 /data
데이터 디렉토리로 사용하도록 구성되었습니다 . 따라서 /data
컨테이너 내부에 데이터베이스가 있습니다 . 그리고 호스트 OS의 컨테이너 외부에서이 /data
볼륨을 마운트 /usr/container/Databases/
했으며 일반 사용자 밥 을 할당 하여 데이터베이스 백업을 수행합니다. 호스트 머신에서 사용자 bob에 대한 ACL을 구성합니다 .
useradd -u 3000 bob
usermod -R o=--- /usr/container/Databases/
setfacl -R -m u:bob:rwx /usr/container/Databases/
setfacl -R -d -m u:bob:rwx /usr/container/Databases/
그것을 테스트하려면 사용자 bob 으로 백업하십시오 .
su - bob
tar -cvf container-data.tar /usr/container/Databases/
그리고 tar가 나열되고 사용자가 모든 파일에 액세스 할 수 있음을 알 수 있습니다.
이제 컨테이너 내부에서 bobgetfacl
대신 3000 을 표시한다는 것을 알 수 있습니다. 이는 bob의 UID가 3000이고 컨테이너에 해당 사용자가 없기 때문에 메타 데이터에서 수신하는 UID를 표시하기 때문입니다. . 이제 컨테이너에서 사용자를 생성하면 3000 대신 bob이라는 이름 이 표시됩니다.useradd -u 3000 bob
getfacl
요약 : 컨테이너 내부 또는 외부에서 할당 한 사용자 권한은 두 환경 모두에 반영됩니다. 따라서 볼륨의 권한을 관리하려면 호스트 시스템의 UID가 컨테이너의 UID와 달라야합니다 .
docker
아직 지원 등) LXC 컨테이너는 권한이없는 사용자로 실행할 수 있습니다. 그렇지 않으면root
컨테이너가 잘못 구성된 경우 컨테이너 내부 의 사용자가 잠재적으로 문제를 일으킬 수 있습니다.root
호스트의 즉root
, 특권 LXC 컨테이너의 컨테이너에 있습니다.