Я работаю с приложением, используя докер (я не очень хорошо знаком), и мне нужно добавить 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"
Как создать образ Docker? Эта инструкция добавлена в docker-compose или вы собираете ее командой?
О, я должен восстановить изображение? Я не знал, что контейнеры и образы разделены, поэтому вам нужно явно перестроить образ, а затем запустить контейнеры? Думаю, я подозревал, что это будет похоже на бродягу, когда вы просто бродите, и все делается за один раз.
«Если вы хотите заставить Compose остановить и заново создать все контейнеры, используйте флаг --force-recreate». Я прочитал это из документов, которые заставили поверить, что это то, что мне нужно было сделать.


Вам нужно восстановить образ
docker-compose build
и следующие повторно запускаемые контейнеры
docker-compose up -d
И если он не хочет применять изменение из-за кеша, вы можете добавить --no-cache.
Я также пробовал
php7.0-bcmath,php7.1-bcmathиphp-bcmath. Ни один из них не работает.