ウェブサイト検索

Linux で非 root ユーザーとして Docker を実行する方法


Ubuntu に Docker をインストールするのは非常に簡単です。初心者でも誰でも15分以内にインストールできます。 Docker をインストールした後、通常のユーザーとしてはほとんどの Docker 操作を実行できないことに気付きました。毎回、「root」ユーザーとして、または「sudo」権限を使用して Docker を実行する必要がありました。 Docker を非 root ユーザーとして、または sudo 権限なしで実行しようとすると、次のエラーが発生します。

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/version: dial unix /var/run/docker.sock: connect: permission denied

たとえば、次のコマンドを使用して、通常のユーザーとして Docker のバージョンを確認したいと考えました。

docker version

そして、次のエラー メッセージが表示されます。

Client: Docker Engine - Community
Version: 19.03.8
API version: 1.40
Go version: go1.12.17
Git commit: afacb8b7f0
Built: Wed Mar 11 01:25:46 2020
OS/Arch: linux/amd64
Experimental: false
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/version: dial unix /var/run/docker.sock: connect: permission denied

しかし、sudo 権限を使用して同じコマンドを実行すると、

sudo docker version

以下の出力に示すように、現在インストールされている Docker バージョンの詳細がすべて表示されます。

Client: Docker Engine - Community
 Version:           19.03.8
 API version:       1.40
 Go version:        go1.12.17
 Git commit:        afacb8b7f0
 Built:             Wed Mar 11 01:25:46 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.8
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.17
  Git commit:       afacb8b7f0
  Built:            Wed Mar 11 01:24:19 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

エラー - UNIX で Docker デーモン ソケットに接続しようとしているときにアクセス許可が拒否されました

Docker ドキュメント ページを検索した結果、Docker デーモンはデフォルトで TCP ポートではなく Unix ソケットにバインドされることがわかりました。そのUnix ソケットは root ユーザーによって所有されているため、Docker デーモンは root ユーザーとしてのみ実行されます。したがって、通常のユーザーはほとんどの Docker コマンドを実行できません。

Linux で非 root ユーザーとして Docker を実行する場合は、次の手順を実行する必要があります。これを Ubuntu 18.04 サーバーでテストしたところ、問題なく動作しました。他の Linux ディストリビューションでも同様に動作するはずです。

重要な警告:

Docker を通常のユーザーとして実行することは、セキュリティの観点からは得策ではありません。私は個人的にこれを使用していませんし、 またお勧めしません。それが個人のシステムであり、システムをインターネットに公開しない場合、それは大した問題ではありません。ただし、本番システムでは非 root ユーザーとして Docker を実行しないでください。

Linux で非 root ユーザーとして Docker を実行する

Docker 権限拒否エラーを修正し、Docker を非 root ユーザーとして使用するには、次のコマンドを使用して「docker」 というグループを作成します。

sudo groupadd docker

次に、 ユーザーをdocker グループに追加します。

sudo usermod -aG docker $USER

ユーザーを docker グループに追加した後、ログアウトして再度ログインし、変更を有効にします。

あるいは、次のコマンドを実行して変更をグループに適用します。

newgrp docker

今後、通常の (非 root) ユーザーは sudo 権限なしで Docker を使用できるようになります。

通常のユーザーとして次のコマンドを実行してみましょう。

docker version
docker run hello-world

サンプル出力:

Linux で非 root ユーザーとして Docker を実行する

見る?これで、sudo 権限なしで両方の Docker コマンドを実行できるようになりました。

念のため、ユーザーを Docker グループに追加する前に、すでに「sudo」権限を使用していくつかの Docker コマンドを実行している場合は、おそらく以下のようなエラーが表示されるでしょう。

WARNING: Error loading config file: /home/user/.docker/config.json -
stat /home/user/.docker/config.json: permission denied

上記のエラー メッセージは、「sudo」コマンドにより、~/.docker/ ディレクトリが間違った権限で作成されたことを示しています。

この問題を解決するには、次のコマンドを使用して、このディレクトリの所有権とアクセス許可を変更します。

sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
sudo chmod g+rwx "$HOME/.docker" -R

これを有効にするには、ログアウトしてから再度ログインします。

それでも問題が解決しない場合は、~/.docker/ ディレクトリを削除する必要がある可能性があります。自動的に再作成されますが、カスタム設定がある場合はすべて失われます。

リソース:

  • Docker インストール後のメモ

関連記事