😎

[VS Code] 一般ユーザーで起動中のコンテナを接続する

2022/11/17に公開約1,600字

概要

VSCodeのDev Containerを使って起動中のコンテナに接続する場合に一般ユーザーとして接続する

ユーザー作成

下記をDockerfileに追加してsudo権限を持ったvscodeというユーザーを作成

# Add non-root user
ARG USERNAME=vscode
ARG USER_UID=1000
ARG USER_GID=$USER_UID

RUN groupadd --gid $USER_GID $USERNAME \
    && useradd -s /bin/bash --uid $USER_UID --gid $USER_GID -m $USERNAME \
    && apt-get install -y sudo \
    && echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME\
    && chmod 0440 /etc/sudoers.d/$USERNAME 

https://qiita.com/Yuki_Oshima/items/d3b52c553387685460b0
ファイルを正しく編集するには、USER_UIDとUSER_GIDはホストのIDと合わせる方が良い[1]

その他

COPYコマンドで--chownオプションを付けると追加したユーザーの所有にできる[2]
USERコマンドを使うとRUN, CMD, ENTRYPOINT, docker run, execの実行ユーザーを変更可能[3]

設定ファイル変更

VSCodeで起動中のコンテナに接続した状態で、コマンドパレットからDev Containers: Open Container Configuration Fileを選ぶことで、コンテナの設定ファイルを開く(ローカル側に置かれている)
デフォルトではimageごとの設定だが、Dev Containers: Open Named Configuration Fileでコンテナの名前ごとの設定ファイルも利用できる
設定ファイルにremoteUserの設定を追加する

{
  // Container user VS Code should use when connecting
  "remoteUser": "vscode",
}

この状態でコンテナに再接続すればユーザーが変更される
なお、Dev Containers: Open Named Configuration Fileで名前ごとの設定ファイルを作成すると、imageごとの設定ファイルは無視されるので注意
https://code.visualstudio.com/docs/devcontainers/attach-container#_attached-container-configuration-files

脚注
  1. Dockerのvolumeでpermission deniedが発生した場合の解決法 ↩︎

  2. DockerfileのADD/COPYに--chownオプションができた ↩︎

  3. Dockerfileによるビルド ↩︎

Discussion

ログインするとコメントできます