2
5

More than 3 years have passed since last update.

dockerでHOMEディレクトリを設定する

Last updated at Posted at 2021-07-02

概要

dockerで、laravelでphp artisan tinkerを使ったらエラー発生した。
HOMEディレクトリに関係するエラーが発生したので、調べたことをメモしておく。

発生したエラーについて

コマンド実行するとHOMEディレクトリに.configフォルダを作成する。
そのため、パーミッションエラーとなったようです。

$ docker-compose exec php php artisan tinker

   ErrorException  : Writing to /var/www/.config/psysh is not allowed.

  at /var/www/www.example.com/vendor/psy/psysh/src/ConfigPaths.php:228
    224|             @\mkdir($dir, 0700, true);
    225|         }
    226| 
    227|         if (!\is_dir($dir) || !\is_writable($dir)) {
  > 228|             \trigger_error(\sprintf('Writing to %s is not allowed.', $dir), E_USER_NOTICE);
    229| 
    230|             return false;
    231|         }
    232| 

実行ユーザーをwww-dataユーザーに変更していた。
しかし、HOMEディレクトリの所有者は、rootユーザーのままだったことが原因でした。

HOMEディレクトリを定義する

Dockerfileで、HOMEディレクトリを設定する。
※ ついでなのでプロンプトの表示も変更してみた...

FROM php:7.3-fpm

ARG USER="www-data"
ARG UID="1000"
ARG GROUP="www-data"
ARG GID="1000"

...

# create user & group
RUN usermod -u $UID $USER && groupmod -g $GID $GROUP

# ↓ ここ追加!! ( create home directory )
ARG HOME_DIR='/var/www'
RUN mkdir -p $HOME_DIR
RUN chown -R $UID:$GID $HOME_DIR

# application directory
ARG APP_DIR='/var/www/www.example.com'
RUN mkdir -p $APP_DIR
RUN chown -R $UID:$GID $APP_DIR

# change user ( root -> www-data )
USER $USER

# ↓ ここ追加!! - 環境変数を設定する ( printenv HOME )
ENV HOME $HOME_DIR

# ↓ ここ追加!! - プロンプト表示を変更する ( create .bashrc )
RUN { \
    echo 'export PS1="${debian_chroot:+($debian_chroot)}\u@\[\e[1;33m\]\w\[\e[m\] $"'; \
    echo ''; \
} >> $HOME_DIR/.bashrc

...

動作確認

修正して再度ビルドして再起動 & tinkerコマンドを実行してみました。

$ docker-compose exec php php artisan tinker
Psy Shell v0.9.12 (PHP 7.3.29 — cli) by Justin Hileman

>>> Hash::make('HogeFuga123456');
=> "$2y$10$6RS1EnIBSsHLMy/K02URCeB4QLsti1f53pkLb2px1lqXt34bRZvYa"  

>>> exit
Exit:  Goodbye

問題ないようです。

参考サイト

以上

2
5
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
2
5