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

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

Dockerfile
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 で所有者を変更することにした。
結果として同じ状態にはなるので問題ないと思います。

参考