目次
概要
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}
2. イメージをビルドする
UID およびユーザー名はビルド時に引数で指定します。こうすることで、Docker イメージ内で作成するユーザーがホストマシンの現在のユーザーと一致します。
docker build --build-arg USERID=$UID --build-arg USERNAME=$USER --tag sample .
docker run -it sample /bin/bash
COPY コマンド、ADD コマンドにより追加したファイルの権限
COPY コマンドや ADD コマンドを使用してファイルをコンテナイメージに追加することができます。
しかし、これらのコマンドで追加されたファイルの所有者はデフォルトで root ユーザーになります。
--chown オプションを使用することで、追加されたファイルの所有者を root 以外に設定できます。
# ファイル sample.txt の所有者・所有グループを ${USERNAME} にして追加する。
COPY --chown=${USERNAME}:${USERNAME} sample.txt ${HOME}/sample.txt

コメント