dockerコマンドでsudoをつけずに実行する方法

はじめに

こんにちはサイオステクノロジーのぺんぎんです!
新卒1年目、初めてのブログ執筆です。よろしくお願いいたします!
私がlinuxの権限周りに振り回された体験記を執筆します。
今回はDockerコマンド実行時にsudo権限をつけないと実行できないエラーが発生したため、その解決方法を共有します。

前提条件

  • Ubuntu 24.04.1 LTS(WSL2上で利用)
  • Docker version 28.1.1

概要

とある日、Dockerやubuntuの環境構築を終え、コンテナの勉強のためdocker-compose.yml、Dockerfileを作成し、docker compose upを実行しようと思い、コマンドを打ちました。すると!
下記エラーが発生しました

failed to solve: ubuntu:16.04: failed to resolve source metadata for docker.io/library/ubuntu:16.04: error getting credentials - err: exit status 1, out: `GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.secrets was not provided by any .service files`

ちなみに、このエラーはsudoを付けてコマンドを実行すると起きませんでした。

解決方法

このコマンドを打つことで解決しました!

sudo apt install gnome-keyring

解決までの経緯

sudoをつけないと実行できないと言うことはまず権限周りを疑います。とりあえずGemini君に「sudo をつけないと docker compose up が実行できない理由はなに?」と聞いてみました。

↓Geminiからの回答

『はい、sudo をつけないと docker compose up が実行できない理由ですね。これは、Linuxの権限管理とDockerの仕組みが関係しています。

例えるなら、あなたは特別な料理クラブ(dockerグループ)のメンバーになったはずなのに、そのメンバーカード(グループ権限)が、まだクラブの入口(現在のログインセッション)で有効になっていないか、あるいは入口そのもの(Dockerデーモンソケット)に何か問題がある、という状況です。』

どうやらdockerグループなるものがあり、このグループに追加されたユーザーはroot権限がなくともdockerコマンドを実行できるようになるらしい…
早速追加してみました。

# dockerグループにユーザーを追加
sudo usermod -aG docker $USER

# dockerグループのユーザー確認
grep '^docker:' /etc/group
# 出力
docker:x:989:一般ユーザー名

実行後PCの再起動を行いdockerグループへのユーザーの追加を反映さました。

しかし、このアプローチでは解決しませんでした。
権限の問題ではなかったみたいです。

再度Geminiに相談しました。
『これは .docker ディレクトリの権限の問題ではなく、Dockerが認証情報を扱うための内部的な仕組み(Credential Helper)、特に secretservice と呼ばれる部分に問題がある可能性が高いです。』

内部的な問題という返答だけ帰ってきて解決の糸口があまりにもなかったため、ここで先輩に相談をしました。

結果として先輩に教えていただいた先ほどのgnome-keyringをインストールするコマンドで解決したのですがなぜ解決したのでしょうか?自分なりに考察をしてみました。

Gnome-keyring(グノームキーリング)とは?

キーリングツールとは「パスフレーズで暗号化されたSSH秘密鍵の、パスフレーズ」や「ChromeやFirefoxなどのブラウザが保管するWebサイトのパスワード」など様々な認証情報を暗号化して保管するツールです。

Gnome KeyeingはキーリングツールでありGnomeプロジェクトによりで開発されました。Ubuntuではデスクトップ環境としてGnomeプロジェクトで開発されたデスクトップ環境であるGnomeを標準採用しているため今回の場合はキーリングとしてGnome-keyringを採用しました。

Dockerはプライベートリポジトリのイメージの保管や組織アカウントやチーム機能の利用などで認証を必要としており、docker loginを行うことでDocker Engineがユーザーの認証情報をホストマシンのキーリングツールに保存します。その認証資格の管理にGnomeを標準採用しているUbuntuなどではGnome-keyringを利用する。

しかし、WSLの「Ubuntu」には最低限のパッケージのみインストールされており、Gnome-keyringは元から入っていない場合も多くあります。そのため私の環境にはGnome-keyringが入っていませんでした。

そして、代わりのキーリングツールが存在しておらず一般ユーザーでコマンドを実行しようとしていた私の環境ではsudoを付けないとコマンドの実行ができなかったと考えます。

感想

このエラーについての記事はほとんど存在しておらず、情報が少なかったためAIに聞いても解決の糸口がつかめませんでした。
AIに頼って解決方法を探っていましたが、AIだけでなくきちんとネットで記事を調べて有用な記事を探しだすことの難しさと大切さを改めて実感しました。
今まで以上に検索力をつけるためエラーに向き合っていこうと思いました。

参考文献

https://qiita.com/onokatio/items/9ca0305e35243cca6119

https://docs.docker.jp/engine/reference/commandline/login.html

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です