write ahead log

ロールフォワード用

dockerでvolumeマウントした時にPermission Deniedが出るのでユーザーを合わせたい

スマートな方法を探したが、結局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