Codeigniter3 Dockerfile部署报错:无法定位msodbcsql17包
解决 "Unable to locate package msodbcsql17" 问题
问题出在你使用的php:7.4-apache镜像基于Debian 11 (bullseye),但你添加的是Debian 10 (buster)的Microsoft软件源,导致apt无法找到对应版本的msodbcsql17包。
以下是修正后的Dockerfile:
# Use an official PHP runtime as a parent image FROM php:7.4-apache # Install system dependencies + Microsoft SQL Server prerequisites RUN apt-get update && apt-get install -y --no-install-recommends \ libonig-dev \ libxml2-dev \ unixodbc-dev \ gnupg2 \ curl \ && docker-php-ext-install mbstring xml pdo pdo_mysql \ # Add Microsoft GPG key and correct Debian 11 repository && curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \ && curl https://packages.microsoft.com/config/debian/11/prod.list > /etc/apt/sources.list.d/mssql-release.list \ && apt-get update \ && ACCEPT_EULA=Y apt-get install -y --no-install-recommends \ msodbcsql17 \ mssql-tools \ # Set PATH globally (works for all shell sessions) && echo 'export PATH="$PATH:/opt/mssql-tools/bin"' > /etc/profile.d/mssql-tools.sh \ && chmod +x /etc/profile.d/mssql-tools.sh \ # Install PHP SQL Server extensions && pecl install pdo_sqlsrv sqlsrv \ && docker-php-ext-enable pdo_sqlsrv sqlsrv \ # Clean up to reduce image size && apt-get purge -y --auto-remove curl \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* # Set the working directory in the container WORKDIR /var/www/html # Copy the current directory contents into the container COPY . /var/www/html/ # Grant permissions and enable Apache rewrite module RUN chown -R www-data:www-data /var/www/html \ && a2enmod rewrite # Expose port 80 EXPOSE 80 # Start Apache server CMD ["apache2-foreground"]
关键修改说明:
- 替换Microsoft软件源:将
debian/10改为debian/11,匹配基础镜像的Debian版本 - 全局设置PATH:将PATH配置写入
/etc/profile.d/mssql-tools.sh,确保所有shell(包括非交互式shell)都能识别mssql-tools的命令 - 优化镜像大小:合并RUN步骤,使用
--no-install-recommends减少不必要的依赖,安装完成后清理无用包和apt缓存 - 调整依赖安装顺序:确保curl在需要时可用,避免重复安装
内容的提问来源于stack exchange,提问作者Nero Chaniago
相关产品推荐
相关产品推荐

