Dockerfile не обновляет контейнер

Я работаю с приложением, используя докер (я не очень хорошо знаком), и мне нужно добавить 2 новых расширения PHP. Я изменил Dockerfile на существующем изображении следующим образом:

FROM php:7.2-fpm

RUN apt-get update

RUN apt-get install -y git unzip

RUN php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer

RUN apt-get install -y git libpng-dev \
    && docker-php-ext-install gd

RUN apt-get install -y mysql-client \
    && docker-php-ext-configure pdo_mysql --with-pdo-mysql=mysqlnd \
    && docker-php-ext-install pdo_mysql

RUN apt-get install -y libgmp-dev bcmath \
    && docker-php-ext-configure gmp \
    && docker-php-ext-install gmp \
    && docker-php-ext-install bcmath

RUN pecl install xdebug \
    && docker-php-ext-enable xdebug

ADD docker/templates/usr/local/etc/php/conf.d/uploads.ini /usr/local/etc/php/conf.d/uploads.ini

Мои новые строки:

RUN apt-get install -y libgmp-dev bcmath \
&& docker-php-ext-configure gmp \
&& docker-php-ext-install gmp \
&& docker-php-ext-install bcmath

Я попробовал docker-compose restart, я попробовал docker-compose down, а затем docker-compose up, я полностью удалил контейнер и заново создал его с помощью up. Как бы я ни старался, я всегда получаю эту ошибку при выполнении composer require

the requested PHP extension bcmath is missing from your system.

Я не уверен, почему это происходит. Почему расширение не устанавливается, и почему, если я полностью удалю содержимое и напишу искаженный текст в Dockerfile, оно всегда работает успешно. Это кеширует?

Может ли кто-нибудь объяснить, как я буду повторно предоставлять новые изменения, которые я сделал?

Фрагмент docker-compose.yml:

services:
  web:
    build:
      context: ./
      dockerfile: docker/web.docker
    working_dir: /var/www
    volumes:
      - ./:/var/www
    ports:
      - 81:80
  app:
    build:
      context: ./
      dockerfile: docker/app.docker
    working_dir: /var/www
    volumes:
      - ./:/var/www
    environment:
      - "LARAVEL_ENVIRONMENT=local"

Я также пробовал php7.0-bcmath, php7.1-bcmath и php-bcmath. Ни один из них не работает.

simonw16 23.03.2019 00:03

Как создать образ Docker? Эта инструкция добавлена ​​в docker-compose или вы собираете ее командой?

Dmitrii 23.03.2019 00:16

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

simonw16 23.03.2019 00:23

«Если вы хотите заставить Compose остановить и заново создать все контейнеры, используйте флаг --force-recreate». Я прочитал это из документов, которые заставили поверить, что это то, что мне нужно было сделать.

simonw16 23.03.2019 00:25
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
3
4
852
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно восстановить образ

docker-compose build

и следующие повторно запускаемые контейнеры

docker-compose up -d

И если он не хочет применять изменение из-за кеша, вы можете добавить --no-cache.

Guillaume Lastecoueres 23.03.2019 00:47

Другие вопросы по теме