我正在尝试创建我的第一张图像,该图像是我从其他人获得的,并且遇到了构建失败的问题。看起来错误在这里

[91mconfigure: error: Cannot find FreeTDS in known installation directories
[0m
no
checking for PDO_DBLIB support via FreeTDS... yes, shared

Docker文件
FROM php:5.6.30-apache

ENV DOWNLOAD_URL https://www.limesurvey.org/stable-release?download=2044:limesurvey2647%20170404targz
#php extensions
RUN docker-php-ext-install pdo pdo_mysql pdo_dblib pdo_pgsql \
    && apt-get update && apt-get install -y \
        freetds-bin \
        freetds-dev \
        freetds-common \
        libct4 \
        libsybdb5 \
        tdsodbc \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libpng12-dev \
        libldap2-dev \
        zlib1g-dev \
        libc-client-dev \
        libkrb5-dev \
    && docker-php-ext-install -j$(nproc) iconv mcrypt \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd \
    && docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu \
    && docker-php-ext-install ldap \
    && docker-php-ext-install zip \
    && docker-php-ext-configure imap --with-imap-ssl --with-kerberos \
    && docker-php-ext-install imap \
    && rm -rf /var/lib/apt/lists/* \

    #Download and install LimeSurvey
    && curl -SL "$DOWNLOAD_URL" -o /tmp/lime.tar.gz \
    && tar xf /tmp/lime.tar.gz limesurvey --strip-components=1 -C /var/www/html \
    && chown -R www-data:www-data /var/www/html \
    && rm -f /tmp/lime.tar.gz \
    && chmod -R 755 /var/www/html/tmp \
    && chmod -R 755 /var/www/html/upload \
    && chmod -R 755 /var/www/html/application/config \
    && mkdir -p /var/lib/php5 \
    && chown www-data:www-data /var/lib/php5

该图像使用的是PHP 5.6.30。我怎样才能看到freetds的安装?

最佳答案

您需要考虑从属软件包的正确安装顺序。当前,您的RUN命令在freetds-{bin,dev}命令之后安装docker-php-ext-install pdo pdo_mysql pdo_dblib pdo_pgsql。如果按安装步骤的顺序进行操作,将找到freetds文件。示例片段:

RUN apt-get update && apt-get install -y \
        freetds-bin \
        freetds-dev \
        freetds-common \
        libct4 \
        libsybdb5 \
        tdsodbc \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libpng12-dev \
        libldap2-dev \
        zlib1g-dev \
        libc-client-dev \
        ...
    && docker-php-ext-install pdo pdo_mysql pdo_dblib pdo_pgsql \
        ...

但是,那还不够。我收到以下错误:
configure: error: Could not find /usr/lib/libsybdb.a|so

您可以通过Google找到针对此类问题的解决方案。在这种特殊情况下,您只需要添加一个符号链接(symbolic link)作为RUN命令的一部分(位于https://github.com/phpbrew/phpbrew/issues/643#issuecomment-165447722):
ln -s /path/to/your/libsybdb.a /usr/lib/

在处理Dockerfile时可能会出现类似的问题。

对于开发,我建议将巨大的RUN命令拆分为几个专用的RUN命令,这样您就不必一遍又一遍地执行每个步骤。当您确信Dockerfile可以工作时,可以将命令重新加入单个RUN命令中。

关于php - Docker PHP和FreeTDS-在已知安装目录中找不到freetds,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43617752/

10-12 05:29