以前は動いていた Dockerfile で permission denied が出るようになった話

Mac に入っている docker を stable から edge に変えたところ、以前は build できていたはずの Dockerfile が build に失敗するようになった。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
$ docker-compose build
Building webapp
Step 1/9 : FROM perl:latest
 ---> dbada67dc42d
Step 2/9 : RUN useradd -m -s /bin/bash appuser     && cpanm Carmel --notest
 ---> Using cache
 ---> 6f9065cda747
Step 3/9 : USER appuser
 ---> Using cache
 ---> c68da1175f01
Step 4/9 : RUN mkdir -p ~/webapp
 ---> Running in ec4f449376a8
ERROR: Service 'webapp' failed to build: OCI runtime create failed: container_linux.go:348: starting container process caused "chdir to cwd (\"/root\") set in config.json failed: permission denied": unknown

たまたまタイミングがそうだっただけで、実際には正しくない書き方だったのかもしれないと思って、より堅実そうな書き方に変更した。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
FROM perl:latest

RUN useradd -m -s /bin/bash appuser \
    && cpanm Carmel --notest

WORKDIR /home/appuser/webapp
RUN chown appuser:appuser /home/appuser/webapp
USER appuser

COPY --chown=appuser:appuser webapp/cpanfile .
RUN carmel install

COPY --chown=appuser:appuser webapp .

CMD carmel exec -- ./myapp.pl daemon -l http://0.0.0.0:$PORT

変更したのはディレクトリを作成する部分。 以前は appuser に切り替えてディレクトリを作成していたけど、そこがエラーになっていた。

なので、ディレクトリを作ったあと chown で所有者を変更することにした。 結果として同じ状態にはなるので問題ないと思います。

参考

comments powered by Disqus
Built with Hugo
テーマ StackJimmy によって設計されています。