![[小ネタ] Dev Container で sudo パスワード問題を解決してみた](https://devio2024-media.developers.io/image/upload/f_auto,q_auto,w_3840/v1767594780/user-gen-eyecatch/drxglimzputggklgtwpr.jpg)
[小ネタ] Dev Container で sudo パスワード問題を解決してみた
はじめに
Dev Container を使っていると、sudoコマンドを実行した際にパスワードを求められることがあります。
問題は、コンテナ内のユーザーパスワードが設定されていない(または不明な)場合、管理者権限が必要な操作が一切できなくなってしまうことです。

今回は、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.jsonでremoteUserをrootに設定する方法もあります。
(こちら最初テストした時には、Claude Code公式のDev Container設定を使ったため、 remoteUserをnodeにしてました。 )
{
"name": "My Dev Container",
"remoteUser": "root",
//...省略
}
これにより、コンテナ接続時に最初から root ユーザーとしてログインするため、sudoを使う必要がなくなります。
⚠️ 注意点:Claude Code との互換性
この方法には重要な制限があります。root ユーザーではclaude --dangerously-skip-permissionsが使用できません。

まとめ
| 方法 | メリット | デメリット |
|---|---|---|
| 方法 1: パスワードなし sudo | 通常ユーザーで作業可能、Claude Code 互換 | Dockerfile の編集が必要 |
| 方法 2: remoteUser=root | 設定が簡単 | Claude Code の一部機能が使えない |
AI Agent と快適にペアプログラミングをするなら、方法 1 で Dockerfile を設定しておくのがいいかもしれません。
以上。









