sudo없이 어떻게 docker를 사용할 수 있습니까? 모든 예제 명령은 다음과

Docker의 설명서 페이지에서 모든 예제 명령은 다음과 같이없이 ​​표시됩니다 sudo.

docker ps

우분투에서 바이너리는이라고 불립니다 docker.io. sudo가 없으면 작동하지 않습니다.

sudo docker.io ps

모든 Docker 명령 앞에 sudo를 붙일 필요가 없도록 Docker를 구성하는 방법은 무엇입니까?



답변

좋은 소식 : 새로운 도커 (버전 19.03 (현재 실험용))는 루트 사용자를 사용하여 발생할 수있는 문제를 무시하면서 루트없이 실행할 수 있습니다. 더 이상 높은 권한, 루트 및 원하지 않을 때 컴퓨터를 열 수있는 모든 것을 망칠 필요가 없습니다.

이에 대한 비디오 [DockerCon 2019] 루트없는 모드로 Docker 데몬 강화

루트없는 도커 모드에 대한 몇 가지주의 사항

도커 엔지니어들은 루트리스 모드는 전체 도커 엔진 기능을 대체 할 수 없다고 말합니다. 루트없는 모드에 대한 일부 제한 사항은 다음과 같습니다.

  • cgroups 리소스 제어, 의류 보안 프로필, 검사 점 / 복원, 오버레이 네트워크 등은 루트없는 모드에서 작동하지 않습니다.
  • 컨테이너에서 포트를 노출하려면 현재 수동 socat 도우미 프로세스가 필요합니다.
  • 우분투 기반 배포판 만 루트없는 모드에서 오버레이 파일 시스템을 지원합니다.
  • 루트없는 모드는 현재 익숙하지 않은 야간 빌드에만 제공됩니다.

docker 19.3 현재 이것은 더 이상 사용되지 않으며 필요 이상으로 위험합니다.

고정 표시기 설명서는 그것에 대해 말을이있다 :

비 루트 액세스 제공

docker 데몬은 항상 루트 사용자로 실행되며 Docker 버전 0.5.2부터 docker 데몬은 TCP 포트 대신 Unix 소켓에 바인딩됩니다. 기본적으로 Unix 소켓은 사용자 루트가 소유하므로 기본적으로 sudo를 사용하여 액세스 할 수 있습니다.

버전 0.5.3부터, (또는 Docker 설치 프로그램)이 docker라는 Unix 그룹을 생성하고 여기에 사용자를 추가하면, docker 데몬은 데몬이 시작될 때 docker 그룹이 Unix 소켓의 소유권을 읽고 쓸 수있게합니다. . docker 데몬은 항상 루트 사용자로 실행해야하지만 docker 그룹의 사용자로 docker 클라이언트를 실행하면 모든 클라이언트 명령에 sudo를 추가 할 필요가 없습니다. 0.9.0부터 docker 이외의 그룹이 -G 옵션을 사용하여 Unix 소켓을 소유하도록 지정할 수 있습니다.

경고 : 도커 그룹 (또는 -G로 지정된 그룹)은 루트와 동일합니다. Docker Daemon Attack Surface 세부 정보루트가 아닌 사용자가 CentOS, Fedora 또는 RHEL에서 Docker를 실행하지 못하게 하는 이유 (michael-n 덕분 에)에 대한이 블로그 게시물을 참조하십시오 .

GitHub실험적 루트없는 모드 의 최근 릴리스 에서 엔지니어는 루트없는 모드를 사용하면 user_namespaces (7), mount_namespaces (7), network_namespaces (7)를 사용하여 권한이없는 사용자로 dockerd를 실행할 수 있습니다.

사용자는 dockerd 대신 dockerd-rootless.sh를 실행해야합니다.

$ dockerd-rootless.sh --experimental

루트없는 모드는 실험적이므로 사용자는 항상 –experimental과 함께 dockerd-rootless.sh를 실행해야합니다.


읽어야 할 중요한 사항 : Linux 설치 후 단계 ( Docker Daemon Attack Surface 세부 정보 링크 )

루트가 아닌 사용자로 Docker 관리

docker 데몬은 TCP 포트 대신 Unix 소켓에 바인딩됩니다. 기본적으로 Unix 소켓은 사용자 루트가 소유하고 다른 사용자는 sudo를 통해서만 액세스 할 수 있습니다. docker 데몬은 항상 루트 사용자로 실행됩니다.

docker 명령을 사용할 때 sudo를 사용하지 않으려면 docker라는 Unix 그룹을 만들고 사용자를 추가하십시오. docker 데몬이 시작되면 docker 그룹에서 Unix 소켓의 소유권을 읽고 쓸 수 있습니다.


  • 도커 그룹이 없으면 추가하십시오.

    sudo groupadd docker
    
  • 연결된 사용자 “$ USER”를 docker 그룹에 추가하십시오. 현재 사용자를 사용하지 않으려면 원하는 사용자와 일치하도록 사용자 이름을 변경하십시오.

    sudo gpasswd -a $USER docker
    
  • newgrp docker그룹 변경 사항을 활성화하려면 a 또는 로그 아웃 / 로그인을 수행하십시오 .

  • 당신이 사용할 수있는

    docker run hello-world
    

    sudo없이 docker를 실행할 수 있는지 확인하십시오.


답변

로 docker 명령을 실행하려면 sudo루트 권한이있는 사용자를 docker 그룹에 추가해야합니다. 이를 위해 다음 명령을 실행하십시오.

 sudo usermod -aG docker $USER

이제 사용자가 로그 아웃 한 후 다시 로그인하십시오. 이 솔루션은 올바른 설치 프로세스로 여기에 잘 설명되어 있습니다 .


답변

사용자를 그룹에 추가하여 dockerdocker를 실행할 수있는 권한을 부여 하는 메커니즘 은에서 docker 소켓에 액세스하는 것 /var/run/docker.sock입니다. 포함 된 파일 시스템이 /var/runACL이 활성화 된 상태로 마운트 된 경우 ACL을 통해이를 달성 할 수도 있습니다.

sudo setfacl -m user:$USER:rw /var/run/docker.sock

나는 완전성을 위해 이것을 포함하고 있습니다.

일반적으로 그룹 기반의 적절한 대안을 사용할 수있을 때마다 ACL을 사용하지 않는 것이 좋습니다. 그룹 구성원 만보고 시스템의 권한을 이해할 수있는 것이 좋습니다. 시스템 권한을 이해하기 위해 파일 시스템에서 ACL 항목을 스캔해야하는 것은 보안 감사에 대한 추가 부담입니다.

경고 1 : 그룹에 root추가 하는 것과 동일 username합니다 docker. root호스트 파일 시스템에 액세스 할 수 있는 방식으로 컨테이너를 시작할 수 있습니다 .

경고 2 : ACL은 그룹 기반 보안보다 보안 감사에 훨씬 더 어렵습니다. 감사 관련 환경에서 그룹을 대신 사용할 수있는 경우 가능하면 ACL을 피하십시오.


답변