为什么我的 PHP-FPM 找不到 libmsodbcsql-18.1.so.2.1?

问题描述 投票:0回答:1

我有一个由以下内容构建的 Docker 容器:

docker-compose.yml

这是我的 php/Docker 文件:

version: "3" services: nginx: build: context: . dockerfile: nginx/Dockerfile ports: - "8080:80" networks: - internal volumes: - ./data/:/var/www/html/ - ./logs/nginx:/var/log/nginx/ php: build: context: . dockerfile: php/Dockerfile networks: - internal volumes: - ./data/:/var/www/html/ - ./logs/php.log:/var/log/fpm-php.www.log networks: internal: driver: bridge

这是我的 PHP 代码:

FROM php:fpm-alpine ENV ACCEPT_EULA=Y # Install prerequisites required for tools and extensions installed later on. RUN apk add --update bash gnupg less libpng-dev libzip-dev nano nodejs npm openssl su-exec unzip curl nginx supervisor # Install yarn as global npm package. RUN npm install -g yarn # Install prerequisites for the sqlsrv and pdo_sqlsrv PHP extensions. RUN curl -O https://download.microsoft.com/download/8/6/8/868e5fc4-7bfe-494d-8f9d-115cbcdb52ae/msodbcsql18_18.1.2.1-1_amd64.apk \ && curl -O https://download.microsoft.com/download/8/6/8/868e5fc4-7bfe-494d-8f9d-115cbcdb52ae/mssql-tools18_18.1.1.1-1_amd64.apk \ && curl -O https://download.microsoft.com/download/8/6/8/868e5fc4-7bfe-494d-8f9d-115cbcdb52ae/msodbcsql18_18.1.2.1-1_amd64.sig \ && curl -O https://download.microsoft.com/download/8/6/8/868e5fc4-7bfe-494d-8f9d-115cbcdb52ae/mssql-tools18_18.1.1.1-1_amd64.sig \ && curl https://packages.microsoft.com/keys/microsoft.asc | gpg --import - \ && gpg --verify msodbcsql18_18.1.2.1-1_amd64.sig msodbcsql18_18.1.2.1-1_amd64.apk \ && gpg --verify mssql-tools18_18.1.1.1-1_amd64.sig mssql-tools18_18.1.1.1-1_amd64.apk \ && apk add --allow-untrusted msodbcsql18_18.1.2.1-1_amd64.apk mssql-tools18_18.1.1.1-1_amd64.apk \ && rm *.apk *.sig # Retrieve the script used to install PHP extensions from the source container. COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/bin/install-php-extensions # Install required PHP extensions and all their prerequisites available via apt. RUN chmod uga+x /usr/bin/install-php-extensions \ && sync \ && install-php-extensions bcmath ds exif gd intl opcache pcntl pcov pdo_sqlsrv redis sqlsrv zip # Downloading composer and marking it as executable. RUN curl -o /usr/local/bin/composer https://getcomposer.org/composer-stable.phar \ && chmod +x /usr/local/bin/composer # Setting the work directory. WORKDIR /var/www/html

当我运行
<?php try { $conn = new PDO("sqlsrv:Server=$serverName;Database=$database", $username, $password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $conn->query("SELECT * FROM MyTable"); $results = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach ($results as $row) { echo "ID: " . $row['id'] . "<br>"; } } catch (PDOException $e) { echo "Error: " . $e->getMessage(); } ?>

时,一切都会按预期开始。但是,当我尝试对 SQL Server 运行简单查询时,出现以下错误:


错误:SQLSTATE[01000]:[unixODBC][驱动程序管理器]无法打开库“/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.1.so.2.1”:找不到文件

我已确认该文件在那里:

docker-compose up


php sql-server docker fpm
1个回答
0
投票
81f9341151fb:/# ls -hald /opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.1.so.2.1 -rwxr-xr-x 1 1001 1001 2.0M Oct 26 2022 /opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.1.so.2.1

msodbcsql
包的指定架构。我在 M1 MacBook Pro 上运行这个程序。我需要找到
mssql-tolls
包。这是 Dockerfile 的更新部分:
arm64

© www.soinside.com 2019 - 2024. All rights reserved.