【发布时间】:2021-08-17 21:42:28
【问题描述】:
背景:我对 Docker 非常陌生,并且正在与一个 CodeIgniter 应用程序的团队合作。该项目的当前版本在使用 MySQL 的 Docker 容器中运行,但我们正在探索迁移到 SQL Server。
当我运行 docker build --no-cache . 时,一切似乎都没有错误,我可以使用 HeidiSQL 连接到数据库。
但是,当我在浏览器中打开应用程序时,我得到:
调用未定义函数 sqlsrv_connect()
错误,如果我使用phpinfo() 调出我的测试文件,我在任何地方都看不到sqlsrv 或pdo_sqlsrv。
我在网上做了很多研究,向队友寻求帮助(我们都是 Docker 新手),甚至购买并浏览了教程,但我无法解决问题。任何帮助将不胜感激,因为我觉得我只是忽略了一些明显的东西。
下面是我的docker-compose.yaml 和Dockerfile。在Dockerfile 中,您可以看到我在网上找到的 4 种变体以尝试使其正常工作,但它们都具有相同的结果。
docker-compose.yaml
version: "3.1"
services:
db_mssql:
container_name: db_mssql
image: mcr.microsoft.com/mssql/server:2019-CU12-ubuntu-20.04
environment:
ACCEPT_EULA: "Y"
SA_PASSWORD: "Testing123"
MSSQL_PID: "Developer"
ports:
- '1433:1433'
volumes:
- mssql-volume:/var/opt/mssql
app-cp-v3:
build: .
container_name: app-cp-v3
ports:
- 8090:80
volumes:
- ./app-cp-v3/:/var/www/html
networks:
- default
working_dir: /var/www/html
environment:
XDEBUG_ENABLE: "true"
XDEBUG_CONFIG: "remote_enable=1 remote_mode=req remote_host=docker.for.mac.localhost remote_port=9004 remote_autostart=1"
volumes:
mssql-volume:
Dockerfile
FROM php:7.3-apache
ENV ACCEPT_EULA=Y
RUN a2enmod rewrite
RUN sed -ri -e 's!/var/www/html!/var/www/html/public/html!g' /etc/apache2/sites-available/*.conf
RUN sed -ri -e 's!/var/www/!/var/www/html/public/html!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
RUN apt-get update && apt-get install -y nano wget gnupg2
RUN docker-php-ext-install bcmath sockets pcntl
RUN pecl install xdebug-2.9.7
RUN docker-php-ext-enable xdebug \
&& echo "xdebug.remote_enable=on" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
&& echo "xdebug.remote_autostart=on" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
&& echo "xdebug.remote_port=9001" >> /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 \
&& echo "xdebug.idekey=vscode" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
&& echo "xdebug.remote_host=docker.for.mac.localhost" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
#RUN echo "xdebug.remote_enable=1" >> /usr/local/etc/php/php.ini
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
RUN apt-get update
RUN ACCEPT_EULA=Y apt-get -y --no-install-recommends install msodbcsql17 unixodbc-dev
RUN pecl install sqlsrv
RUN pecl install pdo_sqlsrv
RUN docker-php-ext-enable sqlsrv pdo_sqlsrv
# V1
# Install MS ODBC Driver for SQL Server
#ENV ACCEPT_EULA=Y
#RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
# && curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list > /etc/apt/sources.list.d/mssql-release.list \
# && apt-get update \
# && ACCEPT_EULA=Y apt-get -y --no-install-recommends install msodbcsql17 unixodbc-dev \
# && pecl install sqlsrv \
# && pecl install pdo_sqlsrv \
# && echo "extension=pdo_sqlsrv.so" >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/30-pdo_sqlsrv.ini \
# && echo "extension=sqlsrv.so" >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/30-sqlsrv.ini \
# && apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*
#
# END V1
# V2
#
#ENV ACCEPT_EULA=Y
#RUN apt-get update \
# && curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
# && curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list \
# > /etc/apt/sources.list.d/mssql-release.list \
# && apt-get install -y --no-install-recommends \
# locales \
# apt-transport-https \
# && echo "en_US.UTF-8 UTF-8" > /etc/locale.gen \
# && locale-gen \
# && apt-get update \
# && apt-get -y --no-install-recommends install \
# unixodbc-dev \
# msodbcsql17
#
#RUN pecl install sqlsrv pdo_sqlsrv \
# && docker-php-ext-enable sqlsrv pdo_sqlsrv
#
# END V2
# V3
#
#RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
#
#Download appropriate package for the OS version
#RUN curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
#RUN apt-get update
#RUN ACCEPT_EULA=Y apt-get install -y msodbcsql17
# optional: for unixODBC development headers
#RUN apt-get install -y unixodbc-dev
#
# activate extensions in php.ini
#RUN pecl channel-update pecl.php.net \
# && pecl install sqlsrv pdo_sqlsrv \
# && docker-php-ext-enable sqlsrv pdo_sqlsrv
#
# END V3
# V4
#
# Microsoft SQL Server Prerequisites
#RUN apt-get update > /dev/null \
# && apt-get install -y --no-install-recommends gnupg2 > /dev/null \
# && apt-get update > /dev/null \
# && curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
# && curl https://packages.microsoft.com/config/debian/9/prod.list \
# > /etc/apt/sources.list.d/mssql-release.list \
# && apt-get install -y --no-install-recommends \
# locales \
# apt-transport-https \
# > /dev/null \
# && echo "en_US.UTF-8 UTF-8" > /etc/locale.gen \
# && locale-gen > /dev/null \
# && apt-get update > /dev/null \
# && apt-get -y --no-install-recommends install \
# unixodbc-dev \
# msodbcsql17 \
# > /dev/null
#
# Install & enable Microsoft SQL Server
#RUN docker-php-ext-install pdo > /dev/null \
# && pecl install sqlsrv pdo_sqlsrv > /dev/null \
# && docker-php-ext-enable sqlsrv pdo_sqlsrv > /dev/null
#
#
# END V4
RUN curl -sS https://getcomposer.org/installer -o composer-setup.php
RUN php composer-setup.php --install-dir=/usr/local/bin --filename=composer
【问题讨论】:
-
您确定
app-cp-v3确实在构建吗? Dockerfile 必须以 FROM 指令开头。 REF -
看起来我的代码块格式不正确,它没有显示第一行:FROM php:7.3-apache
标签: php sql-server docker docker-compose