Docker – コンテナ内で作成したファイルが root 権限にならないようにする方法

概要

Docker コンテナ内でファイルを作成すると、デフォルトではそのファイルの所有者が root ユーザーになります。 これは、ホストマシン上でファイルを扱う際に不便になることがあります。 この記事では、コンテナ内で作成したファイルの所有者を root 以外のユーザーに設定する方法を紹介します。

手順

1. Dockerfile で新しいユーザーを作成する

Dockerfile 内でホストマシンと同じ UID でユーザーを作成します。 UID、ユーザー名は docker build 時に引数で渡せるようにします。

FROM ubuntu:22.04
ARG USERNAME
ARG USERID

# パッケージのインストールなど root 権限が必要な操作を先に行う

# ユーザーを作成する
RUN useradd -ml -u ${USERID} -s /bin/bash -G sudo ${USERNAME} && \
    echo "${USERNAME}:password" | chpasswd

# ユーザーを切り替え
USER ${USERNAME}
WORKDIR /home/${USERNAME}
Docker

2. イメージをビルドする

UID およびユーザー名はビルド時に引数で指定します。こうすることで、Docker イメージ内で作成するユーザーがホストマシンの現在のユーザーと一致します。

docker build --build-arg USERID=$UID --build-arg USERNAME=$USER --tag sample .
docker run -it sample /bin/bash
Bash

COPY コマンド、ADD コマンドにより追加したファイルの権限

COPY コマンドや ADD コマンドを使用してファイルをコンテナイメージに追加することができます。 しかし、これらのコマンドで追加されたファイルの所有者はデフォルトで root ユーザーになります。 --chown オプションを使用することで、追加されたファイルの所有者を root 以外に設定できます。

# ファイル sample.txt の所有者・所有グループを ${USERNAME} にして追加する。
COPY --chown=${USERNAME}:${USERNAME} sample.txt ${HOME}/sample.txt
Docker

コメント

コメントする