【Docker】MacのFinderから追加したファイルがコンテナから認識されない問題を解決する

Railsアプリを開発中、seedファイルでテストデータを作成するためにMacのFinderから`public`フォルダに`item_images`フォルダを作成して、そこに画像ファイルを入れました。
その後、docker composeでコンテナに入って`git status` -> `git add`をすると、`item_images`フォルダに入れた画像ファイルだけ見つからない(認識されない？)というエラーが出ました。

```Dockerfile:Dockerfile
FROM node:14.17.6 as node
FROM ruby:3.2.1
COPY --from=node /opt/yarn-* /opt/yarn
COPY --from=node /usr/local/bin/node /usr/local/bin/
COPY --from=node /usr/local/lib/node_modules/ /usr/local/lib/node_modules/
RUN ln -fs /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm \
  && ln -fs /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npx \
  && ln -fs /opt/yarn/bin/yarn /usr/local/bin/yarn \
  && ln -fs /opt/yarn/bin/yarnpkg /usr/local/bin/yarnpkg

RUN apt-get update -qq && \
  apt-get install -y build-essential \
  libpq-dev \
  postgresql-client \
  && apt-get clean \
  && rm -rf /var/lib/apt/lists/*

RUN mkdir /myapp
WORKDIR /myapp

COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock

RUN bundle install

COPY package.json yarn.lock ./
RUN yarn install

COPY . /myapp

# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]
```

```docker-compose.yml
version: '3'
services:
  db:
    image: postgres:14-alpine
    volumes:
      - db:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=password
  web:
    build: .
    image: rails_template:latest
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
      - bundle:/usr/local/bundle
      - node_modules:/myapp/node_modules
    ports:
      - "3000:3000"
    depends_on:
      - db
  js:
    image: rails_template:latest
    command: yarn build --watch
    volumes:
      - .:/myapp
      - bundle:/usr/local/bundle
      - node_modules:/myapp/node_modules
    tty: true
  css:
    image: rails_template:latest
    command: yarn build:css --watch
    volumes:
      - .:/myapp
      - bundle:/usr/local/bundle
      - node_modules:/myapp/node_modules
    tty: true
volumes:
  db:
  bundle:
  node_modules:
```

```
root@d80682c08150:/myapp# git add -A
error: open("public/item_images/blueberry-torte.jpg"): No such file or directory
error: unable to index file 'public/item_images/blueberry-torte.jpg'
fatal: updating files failed
```

`ls`で確認すると、以下のようにきちんと存在はしています。
```
root@d80682c08150:/myapp# ls  public/item_images/
blueberry-torte.jpg  chocolate-short-cake.jpg  millfeuile.jpg  strawberry-short-cake.jpg
cheese-cake.jpg      green-tea-cake-roll.jpg   mont-blanc.jpg  strawberry-torte.jpg
root@d80682c08150:/myapp# ls -l public/item_images/
total 512
-rw-r--r-- 1 root root  27235 Dec 30 13:18 blueberry-torte.jpg
-rw-r--r-- 1 root root  69656 Dec 30 13:17 cheese-cake.jpg
-rw-r--r-- 1 root root  64661 Dec 30 13:16 chocolate-short-cake.jpg
-rw-r--r-- 1 root root  86306 Dec 30 13:19 green-tea-cake-roll.jpg
-rw-r--r-- 1 root root 125557 Dec 30 13:06 millfeuile.jpg
-rw-r--r-- 1 root root  38965 Dec 30 13:17 mont-blanc.jpg
-rw-r--r-- 1 root root  44727 Dec 30 13:15 strawberry-short-cake.jpg
-rw-r--r-- 1 root root  51975 Dec 30 13:12 strawberry-torte.jpg
```

「Finder上(=ローカル上)でファイルを追加したため、コンテナ側では認識されていない」という仮説を立て、いろいろ試したところ、`docker compose cp`でうまくいきました
(この記事を書くときにtreeコマンドを使ったところ実行結果が何行にもなり、`docker compose cp`の実行結果が消えてしまったのでたしかこうだったという再現です)
`docker compose run -v`などでマウントも試したのですがだめでした(パス指定に問題があったかも？)

```
docker compose cp ファイル・フォルダがあるローカル上の絶対パス(今回だと~/public/item_images/):myapp/public/
```
このあと`git add`したところうまく認識されましたが、これが最善の解決方法かはわかりません。
もし間違いがあればご指摘いただけると幸いです。
Docker難しい・・・。

### 参考
- [【docker】ホスト(ローカル)のファイルをコンテナに渡す - オワタ太のブログ](https://owatata.com/2021/08/28/docker-cp/)
- [Dockerコマンド よく使うやつ #Docker - Qiita](https://qiita.com/Esfahan/items/52141a2ad741933d7d4c)
- [dockerでvolumeをマウントしたときのファイルのowner問題 #Docker - Qiita](https://qiita.com/yohm/items/047b2e68d008ebb0f001)