dockerで一部のサブディレクトリだけvolumesの範囲から除外したい
概要(結論)
空のnamed volumesで除外したいサブディレクトリを上書きすればよい
version: "3.9"
services:
frontend:
build: ./xserver
ports:
- 3000:3000
volumes:
- ./xserver:/app
- dummy-volumes:/app/node_modules # node_modules はホストPCと共用しない(すると動かない)
environment:
- HOST=0.0.0.0
- port=3000
tty: true
working_dir: /app
entrypoint: yarn dev -o
volumes:
dummy-volumes: # ダミー用volume
上記の例でいいますと、
ホストPC側には、./xserver/node_modules が存在し、
volumes で、./xserverをコンテナの/appに紐づけちゃうと、/app/node_modulesがホストPCの./xserver/node_modulesと同じ内容になってしまう状態です。
それを避けたいため、
dummy-volumesという空のnamed volumesを作成し、それをコンテナ内の/app/node_modules に設定することで、ホストの./xserver/node_modulesだけはコンテナに紐づかないので、コンテナの/app/node_modulesがコンテナで作成した内容になります。(ホストの内容で上書きされずに済みます)