Docker php-安装php扩展ssh 2

7nbnzgx9  于 2022-12-22  发布在  Docker
关注(0)|答案(9)|浏览(255)

我使用官方的php docker映像作为应用程序容器的基础,因此Dockerfile的启动方式如下:

FROM php:5.6-fpm-jessie

在文件的后面,我希望有这样的内容:

RUN apt-get update \
    && apt-get install -y libssh2-1-dev libssh2-1 \
    && docker-php-ext-install ssh2

但这告诉我:

/usr/src/php/ext/ssh2 does not exist

因为这是一个基于debian(yessie)的镜像,所以只有旧的php5包可用,php7是通过php:fpm dockerfile中一些棘手的脚本安装的,它似乎所有的扩展都是在使用的php可执行文件中编译的。
在这种情况下如何安装更多扩展?

qlzsbp2j

qlzsbp2j1#

如果您使用的是PHP〉=8.0图像:

FROM php:8.0.2-fpm

RUN apt-get install -y libssh2-1-dev libssh2-1 \
    && pecl install ssh2-1.3.1 \
    && docker-php-ext-enable ssh2
ejk8hzay

ejk8hzay2#

对于Alpine和php〉7

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

vzgqcmou3#

最后,这是成功的。

&& apt-get install -y libssh2-1-dev libssh2-1 \
&& pecl install ssh2 \
&& docker-php-ext-enable ssh2
ws51t4hk

ws51t4hk4#

看起来pecl选项在PHP 6之后的版本中是不可用的,为了安装它,我不得不从源代码开始构建。从php:7.1.27-cli开始,我可以用以下命令来安装它-php:7.1.27-cli映像基于debian stretch:

# install dependencies 
RUN apt-get update && apt-get install -y \
    ssh \
    libssh2-1 \
    libssh2-1-dev \
    wget \
    libssl-dev \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# Install ssh2 extension
RUN wget -O libssh2.tar.gz https://www.libssh2.org/download/libssh2-1.8.1.tar.gz \
    && wget -O ssh2.tgz https://pecl.php.net/get/ssh2-1.1.2.tgz \
    && mkdir libssh2 && tar vxzf libssh2.tar.gz -C libssh2 --strip-components 1 \
    && mkdir ssh2 && tar vxzf ssh2.tgz -C ssh2 --strip-components 1 \
    && cd libssh2 && ./configure \
    && make && make install \
    && cd ../ssh2 && phpize && ./configure --with-ssh2 \
    && make && make install \
    && echo "extension=ssh2.so" >> /usr/local/etc/php/conf.d/ssh2.ini \
    && cd ../ && rm -rf libssh2.tar.gz ssh2.tgz ssh2 libssh2
zyfwsgd6

zyfwsgd65#

我在PHP 7.2的CLI映像上使用的解决方案是:

FROM php:7.2-cli

RUN apt-get install -y libssh2-1 libssh2-1-dev
RUN pecl install ssh2-1.2 && docker-php-ext-enable ssh2

构建Docker映像并确认已安装SSH2扩展:

docker build -t example/php-build .
docker run --rm example/php-build php --ri ssh2

ssh2

SSH2 support => enabled
extension version => 1.2
libssh2 version => 1.8.0
banner => SSH-2.0-libssh2_1.8.0
uplii1fm

uplii1fm6#

最简单的解决方案是使用install-php-extensions,它是一个脚本,可以在任何Docker PHP映像上自动安装所需的系统库。

COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/

RUN install-php-extensions ssh2

install-php-extensions还可以安装大量其他PHP扩展,而不仅仅是ssh2:更多详情请访问https://github.com/mlocati/docker-php-extension-installer

ds97pgxw

ds97pgxw7#

如果有人想在php 7.4中寻找这个更新的版本,你需要以下文件:

安装依赖项

RUN apt-get update && apt-get install -y \
    ssh \
    libssh2-1 \
    libssh2-1-dev \
    wget \
    libssl-dev \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# Install ssh2 extension

RUN wget -O libssh2.tar.gz https://www.libssh2.org/download/libssh2-1.9.0.tar.gz \
    && wget -O ssh2.tgz https://pecl.php.net/get/ssh2-1.2.tgz \
    && mkdir libssh2 && tar vxzf libssh2.tar.gz -C libssh2 --strip-components 1 \
    && mkdir ssh2 && tar vxzf ssh2.tgz -C ssh2 --strip-components 1 \
    && cd libssh2 && ./configure \
    && make && make install \
    && cd ../ssh2 && phpize && ./configure --with-ssh2 \
    && make && make install \
    && echo "extension=ssh2.so" >> /usr/local/etc/php/conf.d/ssh2.ini \
    && cd ../ && rm -rf libssh2.tar.gz ssh2.tgz ssh2 libssh2

here发布的链接最高只能运行php7.2。

yzxexxkh

yzxexxkh8#

我有一些错误的其他解决方案在我的运行容器上richarvey/nginx-php-fpm图像与两个命令一起工作.

apk add --no-cache libssh2-dev autoconf build-base
pecl install https://pecl.php.net/get/ssh2-1.3.tgz
docker-php-ext-enable ssh2
0wi1tuuw

0wi1tuuw9#

PHP 7.4的工作解决方案:

FROM php:7.4-fpm
RUN apt-get install -y libssh2-1 libssh2-1-dev
RUN pecl install ssh2-1.2 && docker-php-ext-enable ssh2

相关问题