如何从 Alpine Docker 映像安装 php8.0-ssh2

Posted

技术标签:

【中文标题】如何从 Alpine Docker 映像安装 php8.0-ssh2【英文标题】:How can I install php8.0-ssh2 from an Alpine Docker image 【发布时间】:2021-11-07 05:30:31 【问题描述】:

这是我用于项目的 Dockerfile(见下文)。你能告诉我如何从这个 Dockerfile 安装 php8.0-ssh2。

FROM php:8.0.0-fpm-alpine

ARG UID
ARG GID

RUN apk add --no-cache mysql-client msmtp perl wget procps shadow libzip libpng libjpeg-turbo libwebp freetype icu

RUN apk add --no-cache --virtual build-essentials \
    icu-dev icu-libs zlib-dev g++ make automake autoconf libzip-dev \
    libpng-dev libwebp-dev libjpeg-turbo-dev freetype-dev && \
    docker-php-ext-configure gd --enable-gd --with-freetype --with-jpeg --with-webp && \
    docker-php-ext-install gd && \
    docker-php-ext-install mysqli && \
    docker-php-ext-install pdo_mysql && \
    docker-php-ext-install intl && \
    docker-php-ext-install opcache && \
    docker-php-ext-install exif && \
    docker-php-ext-install zip && \
    apk del build-essentials && rm -rf /usr/src/php*

RUN wget https://getcomposer.org/composer-stable.phar -O /usr/local/bin/composer && chmod +x /usr/local/bin/composer

RUN apk add --no-cache tzdata
ENV TZ=Europe/Paris
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

COPY php.ini /usr/local/etc/php/php.ini

RUN apk --no-cache add shadow && \
    usermod -u $UID www-data && \
    groupmod -g $GID www-data

我做了很多研究和尝试,包括:

RUN apk add --no-cache libssh2-dev autoconf build-base
RUN pecl install ssh2-1.2 && docker-php-ext-enable ssh2

这似乎适用于 PHP7,但不适用于 PHP8。

感谢您的帮助。

【问题讨论】:

包含如何某些东西不起作用总是很重要的。你得到什么样的错误?您尝试过什么来解决该错误? pecl.php.net/package/ssh2 唯一支持 8+ 的版本是 1.3.1,目前处于 beta 状态。 与我得到的前几行:ERROR: make failed The command '/bin/sh -c pecl install ssh2-1.2 && docker-php-ext-enable ssh2' returned a non-zero code: 1 ERROR: Service 'php-fpm' failed to build : Build failed @Sammitch 非常感谢。使用 1.3.1 一切正常! :-) 【参考方案1】:

我可以为 php 8 安装和激活 ssh2:

RUN apk add --no-cache libssh2-dev autoconf build-base
RUN pecl install ssh2-1.3.1 && docker-php-ext-enable ssh2

感谢@Sammitch 的帮助。

【讨论】:

【参考方案2】:

尝试手动安装

RUN apk add --no-cache build-base libssh2-dev libssh2 autoconf
RUN curl https://pecl.php.net/get/ssh2-1.2.tgz -o ssh2.tgz \
    && pecl install ssh2 ssh2.tgz \
    && docker-php-ext-enable ssh2 \
    && rm -rf ssh2.tgz

【讨论】:

以上是关于如何从 Alpine Docker 映像安装 php8.0-ssh2的主要内容,如果未能解决你的问题,请参考以下文章

Docker alpine 映像的基本命令不起作用

「容器架构」Debian和 Alpine作为基准Docker映像的对比

从“openjdk:8-jdk-alpine”为 Spring Boot 应用程序构建 docker 映像时无法运行“RUN ./mvnw dependency:go-offline -B”

将 mod_rewrite 添加到 Docker 映像 httpd:alpine

为 Spring Boot 应用程序基于“openjdk:8-jdk-alpine”构建 docker 映像时无法运行“./mvnw clean install”

Elastic Beanstalk Docker 映像无法拉取