ぷっぽプログラミング備忘録

linux, javascript, php, C#, そのうちScalaとかアプリ開発とかやってみたいです。

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がコンテナで作成した内容になります。(ホストの内容で上書きされずに済みます)

参考

Docker Compose の bind mounts から node_modules を除外する方法

DockerでVolumeをマウントするとき一部を除外する方法 #JavaScript - Qiita