Ответ 1
Есть опция --no-cache
:
docker build --no-cache -t u12_core -f u12_core .
В старых версиях Docker вам нужно было передать --no-cache=true
, но это больше не так.
Я построил образ Docker из файла Docker с помощью приведенной ниже команды.
$ docker build -t u12_core -f u12_core .
Когда я пытаюсь перестроить его с помощью той же команды, он использует кеш сборки, например:
Step 1 : FROM ubuntu:12.04
---> eb965dfb09d2
Step 2 : MAINTAINER Pavan Gupta <[email protected]>
---> Using cache
---> 4354ccf9dcd8
Step 3 : RUN apt-get update
---> Using cache
---> bcbca2fcf204
Step 4 : RUN apt-get install -y openjdk-7-jdk
---> Using cache
---> 103f1a261d44
Step 5 : RUN apt-get install -y openssh-server
---> Using cache
---> dde41f8d0904
Step 6 : RUN apt-get install -y git-core
---> Using cache
---> 9be002f08b6a
Step 7 : RUN apt-get install -y build-essential
---> Using cache
---> a752fd73a698
Step 8 : RUN apt-get install -y logrotate
---> Using cache
---> 93bca09b509d
Step 9 : RUN apt-get install -y lsb-release
---> Using cache
---> fd4d10cf18bc
Step 10 : RUN mkdir /var/run/sshd
---> Using cache
---> 63b4ecc39ff0
Step 11 : RUN echo 'root:root' | chpasswd
---> Using cache
---> 9532e31518a6
Step 12 : RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config
---> Using cache
---> 47d1660bd544
Step 13 : RUN sed '[email protected]\s*required\s*[email protected] optional [email protected]' -i /etc/pam.d/sshd
---> Using cache
---> d1f97f1c52f7
Step 14 : RUN wget -O aerospike.tgz 'http://aerospike.com/download/server/latest/artifact/ubuntu12'
---> Using cache
---> bd7dde7a98b9
Step 15 : RUN tar -xvf aerospike.tgz
---> Using cache
---> 54adaa09921f
Step 16 : RUN dpkg -i aerospike-server-community-*/*.deb
---> Using cache
---> 11aba013eea5
Step 17 : EXPOSE 22 3000 3001 3002 3003
---> Using cache
---> e33aaa78a931
Step 18 : CMD /usr/sbin/sshd -D
---> Using cache
---> 25f5fe70fa84
Successfully built 25f5fe70fa84
Кеш показывает, что установлен аэроспайк. Однако я не нахожу его внутри контейнеров, порожденных этим изображением, поэтому я хочу перестроить это изображение без использования кэша. Как заставить Docker восстановить чистый образ без кеша?
Есть опция --no-cache
:
docker build --no-cache -t u12_core -f u12_core .
В старых версиях Docker вам нужно было передать --no-cache=true
, но это больше не так.
В некоторых крайних случаях ваш единственный способ избежать повторяющихся сбоев сборки - запустить:
docker system prune
Команда запросит у вас подтверждение:
WARNING! This will remove:
- all stopped containers
- all volumes not used by at least one container
- all networks not used by at least one container
- all images without at least one container associated to them
Are you sure you want to continue? [y/N]
Это, конечно, не прямой ответ на вопрос, но может спасти некоторые жизни... Это спасло мое.
docker build --no-cache.
команды docker build --no-cache.
решил нашу похожую проблему.
Наш Dockerfile был:
RUN apt-get update
RUN apt-get -y install php5-fpm
Но должно было быть:
RUN apt-get update && apt-get -y install php5-fpm
Для предотвращения кеширования обновления и установки отдельно.
Я бы не рекомендовал использовать --no-cache
в вашем случае.
Вы выполняете несколько установок с шага 3 до 9 (я, кстати, предпочел бы использовать один вкладыш), и если вы не хотите, чтобы эти этапы выполнялись каждый раз при создании образа, вы можете измените ваш Dockerfile
с временным шагом до вашей инструкции wget
.
Я использую, чтобы сделать что-то вроде RUN ls.
и измените его на RUN ls./
затем RUN ls./.
и так далее для каждой модификации, сделанной на тарболе, полученном с помощью wget
Конечно, вы можете сделать что-то вроде RUN echo 'test1' > test && rm test
увеличивая число в 'test1
для каждой итерации.
Это выглядит грязно, но, насколько я знаю, это самый эффективный способ продолжать получать выгоду от кеш-системы Docker, которая экономит время, когда у вас много слоев...
С помощью docker-compose попробуйте docker-compose up -d --build --force-recreate
Чтобы убедиться, что ваша сборка полностью перестроена, включая проверку базового образа на наличие обновлений, используйте при сборке следующие параметры:
--no-cache
- это приведет к восстановлению уже доступных слоев
--pull
- Это вызовет извлечение базового изображения, на которое ссылается FROM, и гарантирует, что вы получили последнюю версию.
Поэтому полная команда будет выглядеть следующим образом:
docker build --pull --no-cache --tag myimage:version .
Для docker-compose доступны те же параметры:
docker-compose build --no-cache --pull
Вы можете управлять кешем компоновщика с помощью docker builder
Чтобы очистить весь кэш без запроса: docker builder prune -af