我使用官方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可执行文件中编译。
在这种情况下如何安装更多扩展?
答案 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