Почему мой контейнер продолжает создавать один и тот же слой? - PullRequest
0 голосов
/ 09 февраля 2019

В контейнере, показанном ниже, в данный момент происходит сбой после второго запуска.При попытке отладки я должен запустить его снова.

FROM node:10-alpine

# Create app directory
WORKDIR /usr/src/app

# Copy app
COPY . .

# USER root 
# install packages
RUN apk --no-cache --virtual build-dependencies add \
   git \ 
   python \ 
   make \ 
   g++ \ 
   && npm config set user 0 \
   && npm config set unsafe-perm true \
   && npm i -g wait-on concurrently  truffle@4.1.15\
   && npm install \
   && apk del build-dependencies

RUN truffle compile --all // FAILS HERE

# Expose the right ports, the commands below are irrelevant when using a docker-compose file.
EXPOSE 3000
CMD ["npm", "run", "server"] 

Всякий раз, когда я перестраиваю контейнер, он начинается с первого запуска, что удлиняет процесс.

Я понимаю, что докер состоит в том, что слои в контейнерах должны кэшироваться и перестраиваться только в случае изменения файла?

Буду признателен за указатели на это.

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Вы изменяете файл Docker во время отладки или любой другой файл в вашем текущем каталоге, где находится ваш файл Docker?Если да, то COPY . ., в основном, копирует ваш файл Docker или файлы приложения также внутри образа Docker, и поскольку файлы меняются при каждой сборке, все слои ниже этого, включая COPY . ., не будут использоваться из кэша.Поэтому из кэша будет использоваться только WORKDIR /usr/src/app.

Надеюсь, это поможет.

0 голосов
/ 09 февраля 2019

Каждая инструкция в Dockerfile приводит к слою изображения (с некоторыми исключениями), а слои изображения используются в качестве кэша во время сборок.Но, как только один слой становится недействительным, все последующие слои должны быть перестроены.

В вашем примере, если инструкция COPY . . приводит к разнице, то следующая инструкция RUN apk ... также будет признана недействительнойвызывая его повторный запуск.

Я предлагаю установить пакеты Alpine перед копированием в файлы проекта, а затем выполнить установку npm после.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...