php - 安装mongodb pecl软件包时出现问题:/tmp/pear/temp/mongodb/configure:./configure.lineno:第1行:语法错误:引号未终止

标签 php mongodb docker docker-image

我正在基于(FROM)php:7.0-fpm-alpine图像构建自定义mdocker图像,我需要安装mongodb扩展,因此我的Dockerfile具有以下内容

FROM php:7.0-fpm-alpine
MAINTAINER John Doe <jdoe@example.com>    

RUN apk update &&\
    apk add --update --virtual build_deps gcc g++ autoconf make openssl-dev pcre-dev &&\
    docker-php-source extract &&\
    pecl install mongodb && \
    docker-php-ext-enable mongodb && \
    docker-php-source delete && \
    apk del build_deps autoconf gcc g++ make && \
    rm -rf /var/cache/apk/* && \
    rm -rf /tmp/*

但是,当我在上面构建以下图像时,我得到以下输出( Alpine 软件包安装的输出已省略):
downloading mongodb-1.3.0.tgz ...
Starting to download mongodb-1.3.0.tgz (927,842 bytes)
.........................................................................................................................................................................................done: 927,842 bytes
417 source files, building
running: phpize
Configuring for:
PHP Api Version:         20151012
Zend Module Api No:      20151012
Zend Extension Api No:   320151012
building in /tmp/pear/temp/pear-build-defaultuserfgCbfi/mongodb-1.3.0
running: /tmp/pear/temp/mongodb/configure --with-php-config=/usr/local/bin/php-config
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for a sed that does not truncate output... /bin/sed
expr: syntax error
sh: 0: unknown operand
expr: syntax error
sh: 0: unknown operand
checking for cc... cc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether cc accepts -g... yes
checking for cc option to accept ISO C89... none needed
checking how to run the C preprocessor... cc -E
checking for icc... no
checking for suncc... no
checking whether cc understands -c and -o together... yes
checking for system library directory... lib
checking if compiler supports -R... no
checking if compiler supports -Wl,-rpath,... yes
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu
checking for PHP prefix... /usr/local
checking for PHP includes... -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib
checking for PHP extension directory... /usr/local/lib/php/extensions/no-debug-non-zts-20151012
checking for PHP installed headers prefix... /usr/local/include/php
checking if debug is enabled... no
checking if zts is enabled... no
checking for re2c... no
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
checking for gawk... no
checking for nawk... no
checking for awk... awk
checking if awk is broken... no
checking whether to enable mongodb support... yes, shared
checking OpenSSL dir for mongodb... yes
checking whether to use system default cipher list instead of hardcoded value... no
checking PHP version... 70022
/tmp/pear/temp/mongodb/configure: ./configure.lineno: line 1: syntax error: unterminated quoted string
ERROR: `/tmp/pear/temp/mongodb/configure --with-php-config=/usr/local/bin/php-config' failed
Removing intermediate container 288e5589f2ca

如您所见,我得到以下错误:

/tmp/pear/temp/mongodb/configure: ./configure.lineno: line 1: syntax error: unterminated quoted string


那么,您是否有解决此问题的想法?

最佳答案

您的问题是,为mongodb编写pecl脚本的人都是在bash而不是sh上对其进行测试的。因此该脚本与sh不兼容。解决方法很简单,通过bash运行它

FROM php:7.0-fpm-alpine
MAINTAINER John Doe <jdoe@example.com>

RUN apk update &&\
    apk add --update --virtual build_deps bash gcc g++ autoconf make openssl-dev pcre-dev &&\
    docker-php-source extract &&\
    /bin/bash -lc "pecl install mongodb" && \
    docker-php-ext-enable mongodb && \
    docker-php-source delete && \
    apk del build_deps && \
    rm -rf /var/cache/apk/* && \
    rm -rf /tmp/*

同样对于apk del,您只需要提供虚拟包名称

关于php - 安装mongodb pecl软件包时出现问题:/tmp/pear/temp/mongodb/configure:./configure.lineno:第1行:语法错误:引号未终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46465204/

相关文章:

php - laravel 4 创建模块并将 Controller 、模块和 View 放入模块中

node.js - 在 MongoDB 中定义 3 个具有不同关系的模式(多对多,一对多......)

php - 如何在 Laravel 查询中使用多个 OR、AND 条件

node.js - 如何在Mongodb(Mongoose)中获取html字段数据?

java - 如何使用 java 删除 MongoDB 上的特定字段?

node.js - Node + Docker撰写: Development and production setup

docker:在 $PATH 中找不到可执行文件

docker - 无法从中国连接到docker hub

php - 将时间戳插入 file_put_contents 输出

php mysql 在 config.php 中获取变量并在另一个 php 文件中使用它 * 新的