5
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

docker-composeを使う上でホストとコンテナのユーザーIDとグループIDを揃える

Posted at

はじめに

 「docker…めっちゃ便利やん…!」となっている初心者です。dockerを使い始めて、「rootユーザーでコンテナは立ち上げないように」というのをちらほら見かけました。ユーザー変更せずに開発していたので改めないと…と調べてたどり着いたものをまとめます。使用しているdocker-composeでの方法です。初心者の備忘録ゆえ、間違いあればご指摘嬉しいです。

Dockerfileとdocker-compose.ymlの書き方

 当たり前になりますが、「ユーザーとユーザーグループをローカルIDで追加して、そのユーザーを使用する」というものです。

Dockerfile
ARG UID
ARG GID
ARG USERNAME
ARG GROUPNAME
RUN groupadd -g ${GID} ${GROUPNAME} -f && \
    useradd -m -s /bin/bash -u ${UID} -g ${GID} ${USERNAME}
USER ${USERNAME}
docker-compose.yml
version: "3"
services:
    web:
        restart: always
        build:
            context: .
            args:
                - UID
                - GID
                - USERNAME=user
                - GROUPNAME=user
        working_dir: "/workspace/"
        volumes:
            - .:/workspace

bashで以下のコマンド打ち、コンテナを立ち上げて完了です。

docker-compose build --build-arg UID="$(id -u)" --build-arg GID="$(id -g)" && docker-compose up -d

 groupadd -g ${GID} ${GROUPNAME} -fでグループを、useradd -m -s /bin/bash -u ${UID} -g ${GID} ${USERNAME}でユーザーを作成します。USER ${USERNAME}で作ったユーザーを使用します。
 ARGコマンドで変数を宣言し、同じ名前の変数をdocker-composeのargsで定義します。これでdocker-composeのbuildコマンドで、指定したIDの値をDockerfileに流し込むことができます。

 コンテナを立ち上げる際は、buildコマンドのオプション--build-argを使いargsに書いた変数に値を入れます。ローカルのユーザーおよびグループIDと一致させたいので、${id -u} ${id -g}で引っ張ってきます。

おわりに

 ローカルのIDを自動で入れるのにどうしたら良いんだと探し始めてから、--build-argっていうオプションに辿り着くまで大分時間がかかりました…。あと、bashで長々としたコマンドを打たないといけないの面倒ですよね。素直にdocker-compose up --build -dだけで出来るよう模索したけれどわかりませんでした…。

参考記事

dockerでvolumeをマウントしたときのファイルのowner問題 - Qiita
Dockerコンテナに一般ユーザーを追加するときのDockerfileの設定 - Qiita
ローカルとdockerコンテナ側のUID,GIDを揃える - やる気がストロングZERO

5
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?