スマートな方法を探したが、結局Dockerfileでユーザーを作るアプローチになった。
volume mountする時にはユーザーが合わせられないと不便なケースが多いので、何か良いアプローチがほしい。
1. Dockerfileに以下を書く
パラメータから取得するようにしとく。
# ホスト側と同じユーザーを作成 ARG UID ARG GID ARG USERNAME RUN groupadd -g ${GID} ${USERNAME} RUN useradd -u ${UID} -g ${USERNAME} -m ${USERNAME}
2. docker-compose.ymlに以下を書く
環境変数をパラメータにして設定しておく。
version: '3' services: web: build: context: ./docker/web args: UID: $UID GID: $GID USERNAME: $USERNAME volumes: - "./src:/var/www/project"
3. .envファイルを作る
環境変数を用意する。 docker-compose.ymlと同じ場所に作る。
UID=1000 GID=1000 USERNAME=twinbird
これでdocker compose upでユーザーが作られる。
コンテナ内に入るときにユーザーを指定するには
ホストとユーザーが合わせてあれば以下で同じユーザーで入れる。
docker compose exec --user=$USER -it web /bin/bash
参考
以下がとても参考になった。というかそのまま。 https://qiita.com/houchiey/items/ef0321956821c05b4b6a