Docker 컨테이너 내부에서 탑재된 볼륨에 대한 변경 사항은 마치 일반 사용자가 수행한 것처럼 보이지만 여전히 루트 권한을 유지합니다.

Docker 컨테이너 내부에서 탑재된 볼륨에 대한 변경 사항은 마치 일반 사용자가 수행한 것처럼 보이지만 여전히 루트 권한을 유지합니다.

내가 사용한다면--user매개 변수를 docker run사용하면 변경 사항(예: 단순 변경 mkdir)이 해당(루트가 아닌) 사용자에 의해 수행되는 것으로 나타납니다. 그러나 apt루트 권한이 필요하기 때문에 컨테이너 내부와 같은 명령을 실행할 수 없습니다 . 기본적으로 sudoDocker debian이미지가 사전 설치되어 있지 않습니다 ubuntu.

이 문제를 해결하는 우아한 방법은 무엇입니까?

답변1

당신이 알고 있었다면언제그리고어디변경 사항이 기록되며 chown나중에 다음 파일에서 사용할 수 있습니다.

  • 매개변수( , )를 사용하여 id -u호스트(루트가 아닌) 사용자의 사용자 및 그룹 ID를 Docker 컨테이너에 전달합니다.id -g--env
  • 루트로 명령/스크립트 실행(컨테이너 내)
  • 마지막으로 chown(컨테이너 내에서) 실행하여 호스트 사용자가 변경한 것처럼 보이도록 합니다.

답변2

나는 이것이 특별히 우아한 해결책이라고 생각하지 않지만, 사용자 및 그룹 ID가 (루트가 아닌) 호스트 사용자의 ID와 일치하는 컨테이너 내부에 더미 사용자를 생성하는 것이 가능합니다.

  • 매개변수( , )를 사용하여 id -u호스트(루트가 아닌) 사용자의 사용자 및 그룹 ID를 Docker 컨테이너에 전달합니다.id -g--env
  • 호스트(루트가 아닌) 사용자의 그룹 ID와 일치하는 새 그룹을 생성합니다.

    addgroup --gid $DUMMY_GID dummy
    
  • 호스트(루트가 아닌) 사용자의 사용자 ID와 일치하는 새 사용자를 생성합니다.

    adduser --uid $DUMMY_UID --gid $DUMMY_GID --disabled-password --gecos "" dummy
    
  • 루트 권한이 필요한 명령이 작동합니다

  • 다른 명령/스크립트 실행runuser

    runuser -u dummy -- command
    

관련 정보