Я веб-разработчик, который в настоящее время работает над проектом next.js (это просто основа для SSR ReactJS). Я использую конфигурацию Docker в этом проекте и обнаружил проблему при добавлении/удалении зависимостей. Когда я добавляю зависимость, создаю свой проект и добавляю его с помощью docker-compose, моя новая зависимость не добавляется в мой образ Docker. Мне нужно очистить свою систему докеров с помощью docker system prune, чтобы сбросить все, после чего я мог бы построить и развить свой проект. После этого моя зависимость добавляется в мой контейнер Docker.
Я использую Dockerfile для настройки своего изображения и различных файлов docker-compose для установки различных конфигураций в зависимости от моей среды. Вот моя конфигурация:
Докерфайл
FROM node:10.13.0-alpine
# SET environment variables
ENV NODE_VERSION 10.13.0
ENV YARN_VERSION 1.12.3
# Install Yarn
RUN apk add --no-cache --virtual .build-deps-yarn curl \
&& curl -fSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" \
&& tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/ \
&& ln -snf /opt/yarn-v$YARN_VERSION/bin/yarn /usr/local/bin/yarn \
&& ln -snf /opt/yarn-v$YARN_VERSION/bin/yarnpkg /usr/local/bin/yarnpkg \
&& rm yarn-v$YARN_VERSION.tar.gz \
&& apk del .build-deps-yarn
# Create app directory
RUN mkdir /website
WORKDIR /website
ADD package*.json /website
# Install app dependencies
RUN yarn install
# Build source files
COPY . /website/
RUN yarn run build
docker-compose.yml (оболочка для разработчиков)
version: "3"
services:
app:
container_name: website
build:
context: .
ports:
- "3000:3000"
- "3332:3332"
- "9229:9229"
volumes:
- /website/node_modules/
- .:/website
command: yarn run dev 0.0.0.0 3000
environment:
SERVER_URL: https://XXXXXXX.com
Вот мои команды для запуска моей среды Docker:
docker-compose build --no-cache
docker-compose up
Я предполагаю, что что-то не так в моей конфигурации Docker, но я не могу этого понять. У тебя есть идея помочь мне?
Спасибо!





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