NuxtやExpressの環境をDockerで構築する際に、Dockerfileでinstallしたnode_modulesがdocker compose up
する際に、ホストマシンのファイルがマウントされることによって消えてしまうという問題にぶつかりました。
Dockerfile
1 2 3 4 5 6 |
FROM node:12 WORKDIR /app ... COPY ./package*.json ./ RUN npm install ... |
Dockerfileはこんな感じです。
- package.jsonとpackage-lock.jsonをDockerコンテナにcopy
- npm install
- node_modulesがコンテナ内に作成される
というイメージを作成するようになっています。
この状態で、
1 2 3 4 5 6 7 8 9 10 |
version: '3' services: api: build: . tty: true volumes: - ./src:/app working_dir: /app command: npm run dev ... |
上記のようなdocker-compose.ymlを実行すると、ホストマシンのファイル(node_modulesはない)がDockerコンテナにマウントされて、Dockerfileでinstallするように指示をしたnode_modulesをdeleteしてしまいます。
解決法
1 2 3 4 5 6 7 8 9 10 11 |
version: '3' services: api: build: . tty: true volumes: - ./src:/app - /app/node_modules working_dir: /app command: npm run dev ... |
解決法はすごく簡単で、node_modulesの中身をvolumeで管理すればよいだけでした!