简体   繁体   English

Docker:作曲家要求 = php 扩展未找到

[英]Docker : composer require = php extension not found

I am trying to make a symfony6 + php8 + nginx image我正在尝试制作 symfony6 + php8 + nginx 图像

so far running docker-compose -build I am getting error到目前为止运行docker-compose -build我收到错误

#25 3.462   [InvalidArgumentException]      
#25 3.462   Could not find package ext-gd. 

here is my Dockerfile这是我的Dockerfile

# the different stages of this Dockerfile are meant to be built into separate images
# https://docs.docker.com/develop/develop-images/multistage-build/#stop-at-a-specific-build-stage
# https://docs.docker.com/compose/compose-file/#target


# https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact
ARG PHP_VERSION=8.1
ARG CADDY_VERSION=2

# "php" stage
FROM php:${PHP_VERSION}-fpm-alpine AS symfony_php

# persistent / runtime deps
RUN apk add --no-cache \
        acl \
        fcgi \
        file \
        gettext \
        git \
        gnu-libiconv \
    ;

# install gnu-libiconv and set LD_PRELOAD env to make iconv work fully on Alpine image.
# see https://github.com/docker-library/php/issues/240#issuecomment-763112749
ENV LD_PRELOAD /usr/lib/preloadable_libiconv.so

ARG APCU_VERSION=5.1.21
RUN set -eux; \
    apk add --no-cache --virtual .build-deps \
        $PHPIZE_DEPS \
        icu-dev \
        libzip-dev \
        zlib-dev \
    ; \
    \
    docker-php-ext-configure zip; \
    docker-php-ext-install -j$(nproc) \
        intl \
        zip \
    ; \
    pecl install \
        apcu-${APCU_VERSION} \
    ; \
    pecl clear-cache; \
    docker-php-ext-enable \
        apcu \
        opcache \
    ; \
    \
    runDeps="$( \
        scanelf --needed --nobanner --format '%n#p' --recursive /usr/local/lib/php/extensions \
            | tr ',' '\n' \
            | sort -u \
            | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
    )"; \
    apk add --no-cache --virtual .phpexts-rundeps $runDeps; \
    \
    apk del .build-deps

COPY docker/php/docker-healthcheck.sh /usr/local/bin/docker-healthcheck
RUN chmod +x /usr/local/bin/docker-healthcheck

HEALTHCHECK --interval=10s --timeout=3s --retries=3 CMD ["docker-healthcheck"]

RUN ln -s $PHP_INI_DIR/php.ini-production $PHP_INI_DIR/php.ini
COPY docker/php/conf.d/symfony.prod.ini $PHP_INI_DIR/conf.d/symfony.ini

COPY docker/php/php-fpm.d/zz-docker.conf /usr/local/etc/php-fpm.d/zz-docker.conf

COPY docker/php/docker-entrypoint.sh /usr/local/bin/docker-entrypoint
RUN chmod +x /usr/local/bin/docker-entrypoint

VOLUME /var/run/php

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# https://getcomposer.org/doc/03-cli.md#composer-allow-superuser
ENV COMPOSER_ALLOW_SUPERUSER=1

ENV PATH="${PATH}:/root/.composer/vendor/bin"

WORKDIR /srv/app

# Allow to choose skeleton
ARG SKELETON="symfony/skeleton"
ENV SKELETON ${SKELETON}

# Allow to use development versions of Symfony
ARG STABILITY="stable"
ENV STABILITY ${STABILITY}

# Allow to select skeleton version
ARG SYMFONY_VERSION=""
ENV SYMFONY_VERSION ${SYMFONY_VERSION}

# Download the Symfony skeleton and leverage Docker cache layers
RUN composer create-project "${SKELETON} ${SYMFONY_VERSION}" . --stability=$STABILITY --prefer-dist --no-dev --no-progress --no-interaction; \
    composer clear-cache

###> recipes ###
###> doctrine/doctrine-bundle ###
RUN apk add --no-cache --virtual .mysql-deps mysql-dev; \
    docker-php-ext-install -j$(nproc) pdo_mysql; \
    apk add --no-cache --virtual .mysql-rundeps so:libpq.so.5; \
    apk del .mysql-deps
###< doctrine/doctrine-bundle ###
###< recipes ###

COPY . .

RUN composer require ext-gd
RUN composer require ext-imagick
RUN composer require ext-ctype
RUN composer require ext-fileinfo
RUN composer require ext-iconv
RUN composer require ext-json
RUN composer require ext-openssl
RUN composer require composer/package-versions-deprecated
RUN composer require doctrine/doctrine-bundle
RUN composer require doctrine/doctrine-migrations-bundle
RUN composer require doctrine/migrations
RUN composer require doctrine/orm
RUN composer require jms/serializer-bundle
RUN composer require knplabs/knp-paginator-bundle
RUN composer require laminas/laminas-code
RUN composer require symfony/asset
RUN composer require symfony/cache
RUN composer require symfony/config
RUN composer require symfony/console
RUN composer require symfony/debug-bundle
RUN composer require symfony/dependency-injection
RUN composer require symfony/dotenv
RUN composer require symfony/flex
RUN composer require symfony/framework-bundle
RUN composer require symfony/mailer
RUN composer require symfony/mercure-bundle
RUN composer require symfony/mime
RUN composer require symfony/monolog-bundle
RUN composer require symfony/proxy-manager-bridge
RUN composer require symfony/runtime
RUN composer require symfony/twig-bundle
RUN composer require symfony/validator
RUN composer require symfony/web-profiler-bundle
RUN composer require symfony/yaml
RUN composer require-dev symfony/maker-bundle
RUN composer require-dev symfony/var-dumper


RUN set -ex \
    && apk add --no-cache --virtual .phpize-deps $PHPIZE_DEPS imagemagick-dev libtool \
    && export CFLAGS="$PHP_CFLAGS" CPPFLAGS="$PHP_CPPFLAGS" LDFLAGS="$PHP_LDFLAGS" \
    && pecl install imagick \
    && docker-php-ext-enable imagick \
    && apk add --no-cache --virtual .imagick-runtime-deps imagemagick \
    && apk del .phpize-deps

RUN set -eux; \
    mkdir -p var/cache var/log; \
    composer install --prefer-dist --no-dev --no-progress --no-scripts --no-interaction; \
    composer dump-autoload --classmap-authoritative --no-dev; \
    composer symfony:dump-env prod; \
    composer run-script --no-dev post-install-cmd; \
    chmod +x bin/console; sync
VOLUME /srv/app/var

ENTRYPOINT ["docker-entrypoint"]
CMD ["php-fpm"]

FROM caddy:${CADDY_VERSION}-builder-alpine AS symfony_caddy_builder

RUN xcaddy build \
    --with github.com/dunglas/mercure \
    --with github.com/dunglas/mercure/caddy \
    --with github.com/dunglas/vulcain \
    --with github.com/dunglas/vulcain/caddy

FROM caddy:${CADDY_VERSION} AS symfony_caddy

WORKDIR /srv/app

COPY --from=dunglas/mercure:v0.11 /srv/public /srv/mercure-assets/
COPY --from=symfony_caddy_builder /usr/bin/caddy /usr/bin/caddy
COPY --from=symfony_php /srv/app/public public/
COPY docker/caddy/Caddyfile /etc/caddy/Caddyfile

The Dockerfile looks like the one from the Symfony Github which uses Caddy. Dockerfile 看起来像使用 Caddy 的 Symfony Github 中的那个。

To get that working with Symfony 6.0.1 Download the latest symfony-docker from https://github.com/dunglas/symfony-docker为了让它与 Symfony 6.0.1 一起工作,从https://github.com/dunglas/symfony-docker下载最新的 symfony-docker

Then in your terminal window go to the directory where you downloaded the above project run:然后在您的终端 window go 到您下载上述项目的目录中运行:

SYMFONY_VERSION=6.* docker-compose up --build

This will launch a minimalist skeleton Symfony build using PHP 8, Caddy and Symfony 6.0.1这将使用 PHP 8、Caddy 和 Symfony 6.0.1 启动极简主义骨架 Symfony 构建

If you want the website skeleton use如果你想要网站骨架使用

SKELETON=symfony/website-skeleton SYMFONY_VERSION=6.* docker-compose up --build

Have you try to install gd on your docker?您是否尝试在 docker 上安装 gd?

docker-php-ext-install gd

I had this issue 3 years ago, gd and some other package were missing on the docker, we just added them on the docker file.我在 3 年前遇到过这个问题,在 docker 上缺少 gd 和其他一些 package,我们只是在 docker 文件中添加了它们。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM