php - 带有 SQLSRV 驱动程序错误的 Docker PHP-FPM Alpine
问题描述
当我尝试连接到 sqlserver db 时出现此错误:
Array ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -49 [code] => -49 [2] => This extension
requires the Microsoft ODBC Driver for SQL Server. Access the following URL to download the ODBC
Driver for SQL Server for x64: https://go.microsoft.com/fwlink/?LinkId=163712 [message] => This
extension requires the Microsoft ODBC Driver for SQL Server. Access the following URL to download the
ODBC Driver for SQL Server for x64: https://go.microsoft.com/fwlink/?LinkId=163712 ) )
我的 Dockerfile 下面:
FROM microsoft/mssql-tools as mssql
FROM php:7.2-fpm-alpine
COPY --from=mssql /opt/microsoft/ /opt/microsoft/
COPY --from=mssql /opt/mssql-tools/ /opt/mssql-tools/
COPY --from=mssql /usr/lib/libmsodbcsql-13.so /usr/lib/libmsodbcsql-13.so
RUN apk update \
&& apk add --no-cache git mysql-client curl libmcrypt libmcrypt-dev openssh-client icu-dev
unixodbc-dev \
libxml2-dev freetype-dev libpng-dev libjpeg-turbo-dev g++ make autoconf \
&& docker-php-source extract \
&& pecl install xdebug redis \
&& docker-php-ext-enable xdebug redis \
&& docker-php-source delete \
&& docker-php-ext-install pdo_mysql soap intl zip \
&& pecl install \
sqlsrv \
pdo_sqlsrv \
&& docker-php-ext-enable --ini-name 30-sqlsrv.ini sqlsrv \
&& docker-php-ext-enable --ini-name 35-pdo_sqlsrv.ini pdo_sqlsrv \
&& echo "xdebug.remote_enable=on" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
&& echo "xdebug.remote_autostart=off" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
&& echo "xdebug.remote_port=10000" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
&& echo "xdebug.remote_handler=dbgp" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
&& echo "xdebug.remote_connect_back=0" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
#&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
&& rm -rf /tmp/*
CMD ["php-fpm", "-F"]
WORKDIR /var/www/cssp
EXPOSE 9000
安装驱动好像有问题 有人试过吗?请分享。谢谢你。
解决方案
试试下面的 DockerFile
FROM microsoft/mssql-tools as mssql
FROM php:7.2-fpm-alpine
COPY --from=mssql /opt/microsoft/ /opt/microsoft/
COPY --from=mssql /opt/mssql-tools/ /opt/mssql-tools/
COPY --from=mssql /usr/lib/libmsodbcsql-13.so /usr/lib/libmsodbcsql-13.so
# Install language pack
ENV MUSL_LOCALE_DEPS cmake make musl-dev gcc gettext-dev libintl
ENV MUSL_LOCPATH /usr/share/i18n/locales/musl
RUN apk add --no-cache \
$MUSL_LOCALE_DEPS \
&& wget https://gitlab.com/rilian-la-te/musl-locales/-/archive/master/musl-locales-master.zip \
&& unzip musl-locales-master.zip \
&& cd musl-locales-master \
&& cmake -DLOCALE_PROFILE=OFF -D CMAKE_INSTALL_PREFIX:PATH=/usr . && make && make install \
&& cd .. && rm -r musl-locales-master
# --- not show here---
# mssql odbc for dabase connection
RUN curl -O https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.5.2.1-1_amd64.apk
RUN curl -O https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/mssql-tools_17.5.2.1-1_amd64.apk
RUN apk add --allow-untrusted msodbcsql17_17.5.2.1-1_amd64.apk
RUN apk add --allow-untrusted mssql-tools_17.5.2.1-1_amd64.apk
RUN set -xe \
&& apk add --no-cache --virtual .persistent-deps freetds unixodbc \
&& apk add --no-cache --virtual .build-deps $PHPIZE_DEPS unixodbc-dev freetds-dev \
&& docker-php-source extract \
&& docker-php-ext-install pdo_dblib \
&& pecl install sqlsrv pdo_sqlsrv \
&& docker-php-ext-enable --ini-name 30-sqlsrv.ini sqlsrv \
&& docker-php-ext-enable --ini-name 35-pdo_sqlsrv.ini pdo_sqlsrv \
&& docker-php-source delete \
&& apk del .build-deps
推荐阅读
- python-3.x - 如何从 AWS 策略文档中获取操作值并将其存储为列表?
- sql - SQL 选择具有特定值的不同 ID
- python - 在 Python 中绘制 4D 轮廓(X、Y、Z + 数据)
- html - 我的 css 在 bootstrap 4 中不起作用我该如何解决?
- c - 警告 C4244:'function':从 'int' 转换为 'float',可能丢失数据
- tensorflow - TensorFlow 2 中层的动态输入形状
- iterator - 迭代序列后未触发聚合序列中的 OnComplete
- r - 同样的错误来自哪里,执行 LMER 测试?附资料
- java - Java - 如何从 xml 验证文件中捕获所有异常/错误
- javascript - 锁定命令 Discord.js