本記事は「サーバーの環境構築で詰まったら、BobというAIに聞いてみよう」シリーズのシナリオ2です。
Dockerのセットアップ、意外と落とし穴が多い
「コンテナ使おう!」と意気込んでLinuxサーバーにDockerを入れようとしたら……
E: Package 'docker-ce' has no installation candidate
permission denied while trying to connect to the Docker daemon socket
Cannot connect to the Docker daemon at unix:///var/run/docker.sock
「ドキュメント通りにやったのになぜ!?」ってなることが多いんですよね。OSのバージョン、リポジトリの設定、ユーザー権限……細かいところで引っかかりやすいのがDockerセットアップの難しいところです。
今回のシナリオ:RHEL 8 への Docker インストール
RHEL 8 のサーバーに Docker をインストールしようとして引っかかったケースを取り上げます。
まず公式ドキュメント通りに進めてみます:
$ sudo yum install docker-ce docker-ce-cli containerd.io
すると……
Error:
Problem: package docker-ce-3:24.0.x requires containerd.io >= 1.6.4,
but none of the providers can be installed
- conflicting requests
- nothing provides libseccomp >= 2.5 needed by containerd.io-1.6.x
依存関係のエラーです。「libseccomp のバージョンが足りない?」と思って調べてみても、RHEL 8 特有の問題なのかどうかよく分からない……という状況です。
Bobに聞いてみる
状況をそのまま Bob に投げましょう。
質問例
RHEL 8 のサーバーに Docker CE をインストールしようとしています。
以下のコマンドを実行したところエラーになりました。
$ sudo yum install docker-ce docker-ce-cli containerd.io
エラー内容:
Error: Problem: package docker-ce-3:24.0.x requires containerd.io >= 1.6.4,
but none of the providers can be installed
- conflicting requests
- nothing provides libseccomp >= 2.5 needed by containerd.io
RHEL 8 でDockerをインストールする正しい手順を教えてください。
Bobの回答例
RHEL 8 では Docker CE の公式リポジトリを使う前に、いくつかの前提設定が必要です。
原因: RHEL 8 のデフォルトリポジトリには
docker-ceが含まれず、またpodmanと競合することがあります。手順1: podman と buildah を先に削除(競合回避)
sudo dnf remove -y podman buildah手順2: Docker の公式リポジトリを追加
sudo dnf config-manager --add-repo \ https://download.docker.com/linux/rhel/docker-ce.repo手順3: Docker CE をインストール
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin手順4: Docker サービスを起動・自動起動設定
sudo systemctl start docker sudo systemctl enable docker手順5: 動作確認
sudo docker run hello-world
インストールはできたが次の壁:permission denied
手順通り進めたら Docker 自体はインストールできました。ところが……
$ docker ps
permission denied while trying to connect to the Docker daemon socket
at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json":
dial unix /var/run/docker.sock: connect: permission denied
sudo をつければ動くけど、毎回 sudo は面倒……。これも Bob に聞きましょう。
追加質問例
Docker のインストールは完了しましたが、sudo なしで docker コマンドを実行すると
「permission denied while trying to connect to the Docker daemon socket」
というエラーになります。
一般ユーザーで docker を使えるようにする方法を教えてください。
ユーザー名は "appuser" です。
Bobの回答例(権限設定)
dockerグループにユーザーを追加することでsudoなしで実行できるようになります。# docker グループにユーザーを追加 sudo usermod -aG docker appuser # 設定を反映させるためにログアウト・ログインし直す # または以下のコマンドでセッションを更新 newgrp docker # 確認 docker ps⚠️ セキュリティ注意:
dockerグループへの追加は実質的に root 権限と同等です。本番環境では信頼できるユーザーのみに付与してください。
さらに詰まるパターン:SELinux との戦い
RHEL 環境特有の問題として、SELinux が Docker の動作を阻害することがあります。
$ docker run -v /data:/data myimage
docker: Error response from daemon:
OCI runtime create failed: container_linux.go:380:
starting container process caused "process_linux.go:545:
container init caused \"rootfs_linux.go:76:
mounting \\\"/data\\\" to rootfs at \\\"/data\\\" caused \\\"mount through procfd:
permission denied\\\"\"": unknown.
Bobへの質問例
RHEL 8 + Docker でコンテナ起動時にボリュームマウントがエラーになります。
エラー内容はこちらです:(エラー貼り付け)
SELinux が原因でしょうか?
Bobの回答例(SELinux対応)
SELinux が原因の可能性が高いです。ボリュームマウントには
:zまたは:Zオプションを付けることで解決できます。# :z → 共有ラベルを設定(複数コンテナで共有する場合) docker run -v /data:/data:z myimage # :Z → プライベートラベルを設定(単一コンテナ専用の場合) docker run -v /data:/data:Z myimage根本的な対処として SELinux コンテキストを設定する方法もあります:
sudo chcon -Rt svirt_sandbox_file_t /data⚠️ SELinux を
permissiveやdisabledにするのは、セキュリティ上の問題があるため本番環境では推奨しません。
Bobを使うポイントまとめ
| ポイント | 内容 |
|---|---|
| ディストリビューションとバージョンを明記 | RHEL/CentOS/Ubuntu など、同じLinuxでも手順が違う場合がある |
| エラー全文を貼る | 省略せずに貼るほど原因を絞り込みやすくなる |
| 「なぜこの手順が必要か」も聞く | 手順の理由を理解すると次回以降に応用できる |
| SELinux・firewalld との組み合わせも相談できる | RHEL 特有の問題もBobは把握している |
Bob を試してみたい方へ
🔗 IBM Bob 無料お試し版(30日間・40Bobcoin)
