Когда ваш Dockerfile заканчивается на:
WORKDIR /var/www/html
COPY --from=0 /app ./web/themes/material_admin_mine
Это на самом деле должно скопировать данные с первого этапа сборки в конечный образ.Но затем, когда вы запускаете контейнер с
volumes:
- ./:/var/www/html:cached
, все в дереве каталогов /var/www/html
, включая последний шаг COPY, скрывается и заменяется тем, что находится в текущем каталоге на хосте.Если вы думаете об этом как о копии, это односторонняя копия в контейнер;последующие изменения будут скопированы обратно на хост, но ничто не синхронизирует то, что находится в образе с тем, что у вас было в каталоге во время запуска.
Dockerfile по своей сути не может влиять на содержимое файловой системы хоста.В вашем случае кажется, что содержимое хоста является вторичным по отношению к собственному приложению.Учитывая, что происходит на первом этапе, я просто запустил шаг yarn install
на хосте и покончил с этим (у вас, вероятно, уже есть в наличии даже Node и Yarn).В противном случае вам понадобится более избирательный раздел volumes:
, в котором тщательно стараются не перезаписывать этот каталог;вы можете смонтировать что-то вроде ./web/src:/var/www/html/web/src
, чтобы включить только код вашего приложения и избежать сокрытия дерева .../web/themes
.