PHP扩展不适用于docker-compose中的composer容器 [英] PHP extension unavailable to composer container in docker-compose

查看:30
本文介绍了PHP扩展不适用于docker-compose中的composer容器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用docker-compose,在一个项目中有多个容器:Nginx,PHP,Composer和nginx.除了一件事,所有方法都运行良好:作曲家不工作.我正在尝试安装使用GD扩展名的composer项目,该扩展名安装在PHP中(在PHP容器内使用php -m确认).但是,作曲家容器没有看到"此扩展名,并且抱怨它不存在.如何链接这两个?

I use docker-compose and have a number of containers in one project: Nginx, PHP, Composer and nginx. All works well except for one thing: composer does not work. I am trying to install a composer project that uses the GD extension, which is installed in PHP (confirmed using php -m inside the PHP container). However, the composer container does not "see" this extension and complaints it does not exist. How can I link those two?

docker-compose.yml:

docker-compose.yml:

version: '2'
services:
    web:
        image: nginx:1.15.1
        volumes:
            - ./.docker/conf/nginx/default.conf:/etc/nginx/conf.d/default.conf
            - ./html:/var/www/html
        ports:
            - 8888:80
        depends_on:
            - php
            - db
    php:
        build: .docker
        volumes:
            - ./.docker/conf/php/php.ini:/usr/local/etc/php/conf.d/php.ini
            - ./.docker/conf/php/xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini
            - ./html:/var/www/html
    composer:
        image: composer
        volumes:
            - ./html:/app
        command: install
        depends_on:
            - php
    db:
        image: postgres:10.4
        environment:
            - POSTGRES_DB=test
            - POSTGRES_USER=test
            - POSTGRES_PASSWORD=test
        ports:
            - 5432:5432
        volumes:
            - ./.docker/conf/postgres/:/docker-entrypoint-initdb.d/

    adminer:
        image: adminer
        ports:
        - 8080:8080

Dockerfile:

Dockerfile:

FROM php:7.2-fpm

RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libpng-dev \
        libicu-dev \
        libpq-dev \
        libxpm-dev \
libvpx-dev \
    && pecl install xdebug \
    && docker-php-ext-enable xdebug \
    && docker-php-ext-install -j$(nproc) gd \
    && docker-php-ext-install -j$(nproc) intl \
    && docker-php-ext-install -j$(nproc) zip \
    && docker-php-ext-install -j$(nproc) pgsql \
    && docker-php-ext-install -j$(nproc) pdo_pgsql \
    && docker-php-ext-install -j$(nproc) exif \
    && docker-php-ext-configure gd \
        --with-freetype-dir=/usr/include/ \
        --with-jpeg-dir=/usr/include/ \
        --with-xpm-dir=/usr/lib/x86_64-linux-gnu/ \
        --with-vpx-dir=/usr/lib/x86_64-linux-gnu/ \

错误:

Starting test_app_db_1      ... done
Starting test_app_php_1     ... done
Starting test_app_adminer_1 ... done
Recreating test_app_composer_1 ... done
Starting test_app_web_1        ... done
Attaching to test_app_adminer_1, test_app_php_1, test_app_db_1, test_app_web_1, test_app_composer_1
php_1       | [12-Oct-2018 21:26:47] NOTICE: fpm is running, pid 1
php_1       | [12-Oct-2018 21:26:47] NOTICE: ready to handle connections
adminer_1   | PHP 7.2.1 Development Server started at Fri Oct 12 21:26:47 2018
db_1        | 2018-10-12 21:26:47.716 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
db_1        | 2018-10-12 21:26:47.716 UTC [1] LOG:  listening on IPv6 address "::", port 5432
db_1        | 2018-10-12 21:26:47.736 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
db_1        | 2018-10-12 21:26:47.827 UTC [21] LOG:  database system was shut down at 2018-10-12 21:11:42 UTC
db_1        | 2018-10-12 21:26:47.845 UTC [1] LOG:  database system is ready to accept connections
composer_1  | Loading composer repositories with package information
composer_1  | Updating dependencies (including require-dev)
composer_1  | Your requirements could not be resolved to an installable set of packages.
composer_1  | 
composer_1  |   Problem 1
composer_1  |     - gumlet/php-image-resize 1.9.1 requires ext-gd * -> the requested PHP extension gd is missing from your system.
composer_1  |     - gumlet/php-image-resize 1.9.0 requires ext-gd * -> the requested PHP extension gd is missing from your system.
composer_1  |     - Installation request for gumlet/php-image-resize 1.9.* -> satisfiable by gumlet/php-image-resize[1.9.0, 1.9.1].
composer_1  | 
composer_1  |   To enable extensions, verify that they are enabled in your .ini files:
composer_1  |     - 
composer_1  |     - /usr/local/etc/php/conf.d/date_timezone.ini
composer_1  |     - /usr/local/etc/php/conf.d/docker-php-ext-sodium.ini
composer_1  |     - /usr/local/etc/php/conf.d/docker-php-ext-zip.ini
composer_1  |     - /usr/local/etc/php/conf.d/memory-limit.ini
composer_1  |   You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.
test_app_composer_1 exited with code 2

推荐答案

您是在 php 服务中安装模块,而不是在 composer 服务中安装模块.

You are installing the modules in your php service, but not in your composer service.

运行composer时,其容器中的php安装未安装这些模块.

When composer runs, the php installation in its container doesn't have those modules installed.

您可以在php容器中安装composer,然后从那里运行它.

You could install composer in your php container, and run it from there.

您只需添加以下内容即可

You could do it by simply adding:

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

在您的php dockerfile中,紧接 RUN 行之后.

In your php dockerfile, right after your RUN line.

这将需要您完全删除composer容器,并直接在PHP容器中运行composer.

That would require you removing your composer container completely, and run composer directly within the PHP container.

您还可以简单地运行composer并告诉它不要检查平台要求:

You can also simply run composer and tell it not to check for platform requirements:

docker run --rm --interactive --tty \
    --volume $PWD:/var/www/html \
    composer install --ignore-platform-reqs 

或者由于某种原因(如果您有单独的作曲家容器)

or if you have a separate composer container, for some reason:

docker-compose run composer install --ignore-platform-reqs

这篇关于PHP扩展不适用于docker-compose中的composer容器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆