[小ネタ] Dev Container で sudo パスワード問題を解決してみた

[小ネタ] Dev Container で sudo パスワード問題を解決してみた

2026.01.05

はじめに

Dev Container を使っていると、sudoコマンドを実行した際にパスワードを求められることがあります。
問題は、コンテナ内のユーザーパスワードが設定されていない(または不明な)場合、管理者権限が必要な操作が一切できなくなってしまうことです。

Screenshot 2026-01-05 at 2.02.04 PM

今回は、Linux(こちらのテスト環境は Debian を利用してます)コンテナでこの問題を解決する 2 つの方法を紹介します。

解決方法

方法 1: Dockerfile でパスワードなし sudo を設定する(推奨)

Dockerfile に以下の設定を追加することで、特定のユーザー(この例ではnodeユーザー)にパスワードなしで sudo を実行できる権限を付与できます。

# Grant passwordless sudo to node user
RUN echo "node ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/node && \
    chmod 0440 /etc/sudoers.d/node

USER node

設定の解説

項目 説明
node 対象となるユーザー名
ALL=(ALL) すべてのホストで、すべてのユーザーとしてコマンドを実行可能
NOPASSWD:ALL すべてのコマンドをパスワードなしで実行可能
/etc/sudoers.d/node sudoers 設定のドロップインファイル
chmod 0440 セキュリティのため、root 以外は読み取り専用に設定
USER node 全てのコマンドを実行した後は nodeユーザーに切り替える(場合によっては任意)

この方法のメリットは、通常ユーザーとして作業しつつ、必要な時だけsudoで管理者権限を使えることです。

方法 2: remoteUser を root に変更する

devcontainer.jsonremoteUserrootに設定する方法もあります。
(こちら最初テストした時には、Claude Code公式のDev Container設定を使ったため、 remoteUsernodeにしてました。 )

{
  "name": "My Dev Container",
  "remoteUser": "root",
  //...省略
}

これにより、コンテナ接続時に最初から root ユーザーとしてログインするため、sudoを使う必要がなくなります。

⚠️ 注意点:Claude Code との互換性

この方法には重要な制限があります。root ユーザーではclaude --dangerously-skip-permissionsが使用できません。

Screenshot 2026-01-05 at 2.17.23 PM

まとめ

方法 メリット デメリット
方法 1: パスワードなし sudo 通常ユーザーで作業可能、Claude Code 互換 Dockerfile の編集が必要
方法 2: remoteUser=root 設定が簡単 Claude Code の一部機能が使えない

AI Agent と快適にペアプログラミングをするなら、方法 1 で Dockerfile を設定しておくのがいいかもしれません。

以上。

この記事をシェアする

FacebookHatena blogX

関連記事