Вы явно указываете Docker, что хотите такое поведение.Когда вы говорите:
volumes:
- /website/node_modules/
Вы говорите Docker, что не хотите использовать каталог node_modules
, который запекается в образе.Вместо этого он должен создать анонимный том для хранения каталога node_modules
(который имеет особое поведение при первом использовании) и сохранять данные там, даже если другие характеристики, такие как базовое изображение, изменяются.
Это означает, чтоесли вы измените package.json
и восстановите образ, Docker продолжит использовать версию вашего каталога node_modules
для томов.(Точно так же, bind mount .:/website
означает, что все остальное в последней половине вашего Dockerfile по существу игнорируется.)
Я бы удалил блок volumes:
в этой настройке, чтобы соблюдать встроенную программуизображение.(Я бы также предложил переместить command:
в CMD
строку в Dockerfile
.) Разрабатывайте и тестируйте свое приложение без использования Docker, а также создавайте и развертывайте образ, как только он по существу заработает, но не раньше.