내 서버의 Docker LXC 컨테이너 내에서 일부 서비스를 실행하고 있으며, 실제로 해당 서비스를 사용하여 몇 가지 심각한 작업을 시작하고 있습니다.
내가 명확하지 않은 한 가지는 사용자 권한이 컨테이너 내부와 외부에서 어떻게 작동하는지입니다. 예를 들어 컨테이너에서 MySQL을 실행하고 해당 데이터 디렉터리를 /data
Docker 볼륨으로 설정하면 컨테이너 내부 및 외부 권한이 액세스 정책에 어떤 영향을 미치나요?
분명히 아이디어는 컨테이너(예: mysql:mysql
)에서 자체 사용자로 MySQL을 실행하고 디렉터리에 대한 읽기 및 쓰기 권한을 부여하는 것입니다. 나는 그것이 매우 간단하다고 생각합니다. 단지 chmod
디렉토리 등에 액세스하기 만 하면 됩니다. 그런데 이게 어떻게 작동하는 걸까요외부컨테이너? 이제 "데이터"라는 Docker 공유 볼륨이 생겼습니다. 이에 대한 액세스 제어를 어떻게 관리합니까?
특히 권한이 없는 사용자로 실행할 수 있기를 원합니다.외부Docker 컨테이너는 주기적으로 MySQL 공유 볼륨에 액세스하여 데이터를 백업합니다.
호스트 시스템의 특정 사용자가 Docker 공유 볼륨의 파일 및 폴더를 읽고 쓸 수 있도록 권한, 사용자 및 그룹을 설정하려면 어떻게 해야 합니까?
답변1
Docker 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
/data
컨테이너 내부에는 MySQL 서버가 데이터 디렉터리로 사용되도록 구성되었습니다 . 따라서 우리 데이터베이스는 /data
컨테이너 내부에 있습니다. 호스트 OS의 컨테이너 외부에 /data
볼륨을 마운트 /usr/container/Databases/
하고 일반 사용자를 할당했습니다.단발백업 데이터베이스. 호스트에서 사용자에 대한 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/
테스트를 위해 사용자와 함께 백업을 만들어 보겠습니다.단발.
su - bob
tar -cvf container-data.tar /usr/container/Databases/
tar가 나열되고 사용자가 모든 파일에 액세스할 수 있음을 알 수 있습니다.
이제 컨테이너 내부를 검사하면 getfacl
찾을 수 있습니다.단발3000이 표시됩니다. 이는 bob의 UID가 3000이고 컨테이너에 해당 사용자가 없기 때문에 메타데이터에서 받은 UID만 표시하기 때문입니다. 이제 컨테이너에 사용자를 생성하면 3000 대신 bob이라는 이름이 표시되는 useradd -u 3000 bob
것을 확인할 수 있습니다 .getfacl
일반화하다: 따라서 컨테이너 내부 또는 외부에서 할당한 사용자 권한은 두 환경 모두에 반영됩니다. 그래서볼륨의 권한을 관리하려면 호스트의 UID와 컨테이너의 UID가 달라야 합니다..