Docker php-安装php扩展ssh2

时间:2018-08-24 03:53:04

标签: php docker

我使用官方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软件包可用,并且{7}中的某些棘手脚本安装了php7,这表明所有扩展都在使用的php可执行文件中编译。

在这种情况下如何安装更多扩展?

7 个答案:

答案 0 :(得分:2)

最后,这是成功的。

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

答案 1 :(得分:2)

对于Alpine和php> 7

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

答案 2 :(得分:1)

似乎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

答案 3 :(得分:0)

在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

答案 4 :(得分:0)

对于正在寻找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发布的链接仅适用于php 7.2。

答案 5 :(得分:0)

如果您使用的是 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

答案 6 :(得分:0)

最简单的解决方案是使用 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