Sudoなしでdockerを使用するにはどうすればよいですか?

Dockerのドキュメントページでは、すべてのコマンド例が表示されます sudo このように、:

docker ps

Ubuntuでは、バイナリは docker.io. また、sudoなしでは機能しません:

sudo docker.io ps

すべてのDockerコマンドの前にsudoを付ける必要がないようにDockerを設定するにはどうすればよいですか?

良いニュース:新しいdocker(バージョン19.03(現在実験中))は、rootユーザーを使用して発生する可能性のある問題を否定するrootlessを実行できるようになります。 これ以上の昇格された権限、ルートとあなたがしたくなかったときにあなたのマシンを開く可能性があります何かをいじりません。

これについてのビデオから [DockerCon2019]ルートレスモードでDockerデーモンを強化する

Rootless Dockerモードへのいくつかの注意点

Dockerのエンジニアは、RootlessモードはDocker engine機能の完全なスイートの代替とはみなされないと言います。 Rootlessモードの制限には、次のものがあります:

  • cgroupsリソースコントロール、apparmorセキュリティプロファイル、チェックポイント/復元、オーバ ルートレスモードでは動作しません。
  • コンテナからポートを公開するには、現在、手動のsocatヘルパープロセスが必要です。
  • ルートレスモードでオーバーレイファイルシステムをサポートするのは、Ubuntuベースのディストロのみです。
  • ルートレスモードは、現在、あなたが慣れているほど安定していないかもしれない夜間のビルドにのみ提供されています。

Docker19.3以降、これは廃止されています(必要以上に危険です):

その ドッカーマニュアル これはそれについて言うことがありますか:

Root以外のアクセス権を付与する

Dockerデーモンは常にrootユーザーとして実行され、Dockerバージョン0.5.2以降では、DOCKERデーモンはTCPポートではなくUnixソケットにバインドされます。 デフォルトでは、そのUnixソケットはユーザー rootによって所有されているため、デフォルトではsudoでアクセスできます。

バージョン0.5.3から、dockerという名前のUnixグループを作成し、それにユーザーを追加すると、dockerデーモンはデーモンの起動時にdockerグループによってUnixソケットの所有権 Dockerデーモンは常にrootユーザーとして実行する必要がありますが、dockerクライアントをdockerグループのユーザーとして実行する場合は、すべてのクライアントコマンドにsudoを追加する必要はありません。 0.9.0以降では、docker以外のグループが-Gオプションを使用してUnixソケットを所有するように指定できます。

警告:dockerグループ(または-Gで指定されたグループ)はrootと同等です。 ドッカーデーモン攻撃面の詳細 このブログ記事を参照しているブログ一覧: 非rootユーザーにCentOS、Fedora、またはRHELでDockerを実行させない理由 (おかげでマイケル-n)。

の最近のリリースでは、 GitHubでの実験的なルートレスモード このモードでは、user_namespaces(7),mount_namespaces(7),network_namespaces(7)を使ってdockerdを非特権ユーザーとして実行することができます。

ユーザーは実行する必要がありますdockerd-rootless.sh dockerdの代わりに。

$ dockerd-rootless.sh --experimental

Rootlessモードは実験的なものであるため、ユーザーは常に実行する必要がありますdockerd-rootless.sh と-実験的。


読むことが重要: Linuxのインストール後の手順 にもリンクしています) ドッカーデーモン攻撃面の詳細).

非rootユーザーとしてDockerを管理する

DockerデーモンはTCPポートではなくUnixソケットにバインドします。 デフォルトでは、Unixソケットはユーザー rootによって所有され、他のユーザーはsudoを使用してのみアクセスできます。 Dockerデーモンは常にrootユーザーとして実行されます。

Dockerコマンドを使用するときにsudoを使用したくない場合は、dockerというUnixグループを作成し、ユーザーを追加します。 Dockerデーモンが起動すると、Unixソケットの所有権がdockerグループによって読み取り/書き込み可能になります。


  • Dockerグループがまだ存在しない場合は追加します:

     sudo groupadd docker
  • 接続されているユーザー$USERをdockerグループに追加します。 現在のユーザーを使用しない場合は、ユーザー名を優先ユーザーと一致するように変更します:

     sudo gpasswd -a $USER docker
  • どちらかを行う newgrp docker または、グループへの変更を有効にするには、ログアウト/インします。

  • あなたが使用することができます

     docker run hello-world

    sudoなしでdockerを実行できるかどうかを確認します。

なしでdockerコマンドを実行するには sudo、ユーザー(root権限を持つユーザー)をdockerグループに追加する必要があります。 このために次のコマンドを実行します:

 sudo usermod -aG docker $USER

次に、ユーザーにログアウトさせてから、再度ログインします。 この解決策はよく説明されています ここでは、 適切なインストールプロセスを使って。

ユーザーをグループに追加するメカニズム docker dockerを実行する権限を付与すると、dockerのソケットにアクセスすることができます /var/run/docker.sock. が含まれているファイルシステムの場合は、 /var/run Aclを有効にしてマウントされていますが、これはAclを介しても実現できます。

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

私は完全性のためにこれを含めています。

一般的に、グループに基づいた優れた代替手段が利用可能な場合は常にAclを避けることをお勧めします。 システム権限を理解するためにACLエントリのファイルシステムをスキャンする必要があることは、セキュリティ監査のさらなる負担です。

警告1:これは同じです root 加算としての等価性 $USERdocker グループ。 あなたはまだ持っている方法でコンテナを起動することができます root ホストファイルシステムへのアクセス。

警告2:Aclは、グループベースのセキュリティよりもセキュリティ監査の方がはるかに困難です。 少なくとも監査関連の環境では、代わりにグループを使用できる場合は、可能であればAclを避けることをお勧めします。

Dockerグループを作成し、それにユーザーを追加した後

sudo groupadd dockersudo usermod -aG docker $USER

... 私はまだ与えなければならなかった /var/run/docker.sock ソケットと /var/run/docker ディレクトリそれを動作させるための適切な権限:

sudo chown root:docker /var/run/docker.socksudo chown -R root:docker /var/run/docker

ログアウトして(そのユーザーで)再度ログインすると、dockerコマンドを実行することができます sudo:

docker run hello-world

Dockerコンテナはrootユーザーが実行する必要があります。 あなたは自分自身を追加することができます docker グループ(例えば、実行することによって sudo usermod -aG docker $USER)、しかし、これはへのアクセス権を持つ誰のためにそれが容易になります $USER マシンへのrootアクセスを取得するためのアカウント(特権コンテナにルートボリュームをマウントするなど)。

非rootユーザーとしてDockerコンテナを実行するよりセキュリティに配慮した方法は、Podmanを使用することです: https://podman.io/. そのウェブサイトから:

Podmanは、Linuxシステム上でOCIコンテナを開発、管理、および実行するためのデーモンレス-コンテナ-エンジンです。 コンテナはrootまたはinとして実行できます ルートレスモード. 簡単に言えば: alias docker=podman.

もう1つの選択肢は、より一般的にHPC環境に展開される特異点です。: https://sylabs.io/.

別名はどうですか? そうすれば、あなたはまだパスワード保護でsudoを使用します。 別名docker=“sudo docker”

Ufwを有効にすることを忘れないでください;)

Ubuntu14.04[あり](Ubuntu – Error

推奨されるインストールは、デフォルトのubuntu reposのdockerではなく、ここでの手順(Redirecting…)、docker repoを使用することをお勧めします。 既存のdockerのものをすべて削除し、正しいソースから取得していることを確認します:`apt-cache policy docker-engine’(apt urlはからのものでなければなりませんdockerproject.org

Rootにdocker infoのような簡単なことをするように要求するためのこれは何の迷惑ですか。 'Docker info’のように、実行するにはすべてのファイルとデバイスとポートへの生のアクセスが必要です。

@anatolytechtonik私はまた、'docker’の代わりに’docker’を使用しましたdocker.io’Ubuntu14.04LTSで

そうでない場合は、すべてをrootとして実行することもできます。

sudo chmod666/var/run/docker.靴下