我有一个由以下内容构建的 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
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