dockerのコンテナでnpmを自動実行しようとした際にうまくいかなかった。
その解消方法に以下のような形で解消を行なった。
Dockerfileに書いていた記述をdocker-composeファイルで処理するようにした。
node:
image: node:lts-alpine
volumes:
- ./src:/app
working_dir: /app
command: sh -c "npm i && npm run dev"
そもそもの原因は、ボリュームマウントをしたものに対してDockerfile内で処理を行ったことがよくなかった。
Dockerfileはコンテナのイメージの作成を行う。
その中でnpmのコマンドを叩いた場合、そのイメージ内でnpmのインストールを行う。
イメージを作成した後に、ボリュームマウントがされるので、そのインストールされたデータがマウントデータで上書きされてしまうのである。
それを回避するには、イメージを作成し、データマウントした後にコマンドを叩けるようにするということ。
つまりdocker-composeの方でコマンドを叩けば実装が可能ということである。
一つ注意点がある、Dockerfileではbuildされた場合にイメージファイルを作成、再作成するが、docker-composeで指定されている場合、dockerが立ち上がった際に毎回それが実行される。
つまり、npm installがその都度実行される。
コメント