php - 在 docker 上安装 Gd 扩展
问题描述
我试图在 docker 上安装 gd 扩展,但它不起作用,我发现了一些使用 php-fm 的示例,但它不适用于我使用的图像,这是我的dockerfile
:
FROM php:7.4.2-apache
RUN pecl install xdebug && docker-php-ext-enable xdebug && docker-php-ext-install mysqli pdo pdo_mysql && docker-php-ext-enable pdo_mysql && pecl install apcu && docker-php-ext-enable apcu \
# not yet in linux: xdebug.remote_host = host.docker.internal \n\
&& echo "\n\
xdebug.mode = debug \n\
xdebug.start_with_request = yes \n\
xdebug.client_port = 9003 \n\
xdebug.client_host = 172.18.0.1 \n\
xdebug.log = "C:\xdebug_log\xdebug.log" \n\
xdebug.idekey = VSCODE \n\
" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN apt-get update \
&& apt-get -y --no-install-recommends install libfontconfig1 libxrender1 libxext6 \
&& apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*
RUN cd /usr/local/etc/php/conf.d/ && \
echo 'memory_limit = -1' >> /usr/local/etc/php/conf.d/docker-php-memlimit.ini
RUN docker-php-ext-install opcache && docker-php-ext-enable opcache
更新:
I made some changes , then my dockerfile is
FROM php:7.4.2-apache
RUN pecl install xdebug && docker-php-ext-enable xdebug && docker-php-ext-install mysqli pdo pdo_mysql && docker-php-ext-enable pdo_mysql && pecl install apcu && docker-php-ext-enable apcu \
# not yet in linux: xdebug.remote_host = host.docker.internal \n\
&& echo "\n\
xdebug.mode = debug \n\
xdebug.start_with_request = yes \n\
xdebug.client_port = 9003 \n\
xdebug.client_host = 172.18.0.1 \n\
xdebug.log = "C:\xdebug_log\xdebug.log" \n\
xdebug.idekey = VSCODE \n\
" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN apt-get update \
&& apt-get -y --no-install-recommends install libfontconfig1 libxrender1 libxext6 \
&& apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*
RUN cd /usr/local/etc/php/conf.d/ && \
echo 'memory_limit = -1' >> /usr/local/etc/php/conf.d/docker-php-memlimit.ini
RUN docker-php-ext-install opcache && docker-php-ext-enable opcache
RUN apt-get install -y \
libzip-dev \
zip \
&& docker-php-ext-install zip
# GD
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j "$(nproc)" gd
COPY 000-default.conf /etc/apache2/sites-available/000-default.conf
RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
&& docker-php-ext-install -j$(nproc) iconv \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd
COPY 000-default.conf /etc/apache2/sites-available/000-default.conf
and I get this error:
configure: error: unrecognized options: --with-freetype-dir, --with-jpeg-dir
ERROR: Service 'apache_with_php' failed to build: The command '/bin/sh -c apt-get update && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev && docker-php-ext-install -j$(nproc) iconv && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && docker-php-ext-install -j$(nproc) gd' returned a non-zero code: 1
我尝试安装 zlib,因为它警告找不到它,我尝试安装 zlib 和 gd,但我得到了
Building dependency tree...
Reading state information...
E: Unable to locate package libzip-dev
E: Unable to locate package zip
ERROR: Service 'apache_with_php' failed to build: The command '/bin/sh -c apt-get install -y libzip-dev zip && docker-php-ext-install zip' returned a non-zero code: 100
更新 2:
我在 dockerfile 中做了一些更改:
FROM php:7.4.2-apache
RUN pecl install xdebug && docker-php-ext-enable xdebug && docker-php-ext-install mysqli pdo pdo_mysql && docker-php-ext-enable pdo_mysql && pecl install apcu && docker-php-ext-enable apcu \
# not yet in linux: xdebug.remote_host = host.docker.internal \n\
&& echo "\n\
xdebug.mode = debug \n\
xdebug.start_with_request = yes \n\
xdebug.client_port = 9003 \n\
xdebug.client_host = 172.18.0.1 \n\
xdebug.log = "C:\xdebug_log\xdebug.log" \n\
xdebug.idekey = VSCODE \n\
" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN apt-get update \
&& apt-get -y --no-install-recommends install libfontconfig1 libxrender1 libxext6 \
&& apt-get clean
RUN cd /usr/local/etc/php/conf.d/ && \
echo 'memory_limit = -1' >> /usr/local/etc/php/conf.d/docker-php-memlimit.ini
RUN docker-php-ext-install opcache && docker-php-ext-enable opcache
RUN apt update && apt install -y zlib1g-dev libpng-dev
RUN docker-php-ext-install gd && docker-php-ext-enable gd
#RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*
COPY 000-default.conf /etc/apache2/sites-available/000-default.conf
现在构建没有错误,但我收到此消息:
warning: gd (gd.so) is already loaded!
当我检查phpinfo()
gd
不在扩展列表中时
解决方案
正如上面评论中提到的,您的依赖项应该安装在RUN
. 如果您删除/var/lib/apt/lists
,您将不得不apt-get update
一次又一次地运行以确保数据在那里,否则您将无法通过apt-get install
.
FROM php:7.4.2-apache
RUN apt-get update \
&& apt-get -y --no-install-recommends install libfontconfig1 libxrender1 libxext6 zlib1g-dev libpng-dev libfreetype6-dev libjpeg62-turbo-dev \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN pecl install xdebug && docker-php-ext-enable xdebug && docker-php-ext-install mysqli pdo pdo_mysql && docker-php-ext-enable pdo_mysql && pecl install apcu && docker-php-ext-enable apcu \
# not yet in linux: xdebug.remote_host = host.docker.internal \n\
&& echo "\n\
xdebug.mode = debug \n\
xdebug.start_with_request = yes \n\
xdebug.client_port = 9003 \n\
xdebug.client_host = 172.18.0.1 \n\
xdebug.log = "C:\xdebug_log\xdebug.log" \n\
xdebug.idekey = VSCODE \n\
" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN cd /usr/local/etc/php/conf.d/ && \
echo 'memory_limit = -1' >> /usr/local/etc/php/conf.d/docker-php-memlimit.ini
RUN docker-php-ext-install opcache && docker-php-ext-enable opcache \
docker-php-ext-configure gd --with-freetype --with-jpeg --with-png && docker-php-ext-install -j$(nproc) gd
RUN /tmp/* /var/tmp/* /usr/share/doc/*
COPY 000-default.conf /etc/apache2/sites-available/000-default.conf
推荐阅读
- python - 如何解决此 ctypes 安装错误?(PyCharm CE)
- microsoft-graph-api - MS 图 - 附加大文件。观众声明值无效“aud”
- javascript - Google Tag 无法在 Elementor 上触发事件触发器
- python - 调用用户定义的函数不起作用。相反,当它的数据单独使用时,它可以工作。如何解决?
- python - python函数中的UnboundLocalError替换为NameError?
- javascript - javascript中超类的构造函数和继承属性
- scala - 使用 Bijection 将 Akka future 转换为 Twitter Future 时出错
- excel - 将数据透视表复制到另一个具有另一个数据透视表的工作表
- excel - 数据透视表错误无效的过程调用或参数
- python-3.x - Python:将 copula 拟合到时间序列数据并将新数据放入分布中