Docker构建基于Debian的PHP容器时安装SQL Server驱动失败,提示apt-key: not found
Docker构建基于Debian的PHP容器时安装SQL Server驱动失败,提示apt-key: not found
我之前也踩过一模一样的坑!最近官方的Debian系镜像(包括你用的php:8.2-apache)已经把apt-key工具彻底移除了——这个工具早就被Debian官方标记为废弃,现在连预装都取消了,这就是你看到apt-key: not found错误的直接原因。
不用慌,只要把密钥导入的方式换成现在Debian推荐的新方法就行,具体改法如下:
核心修改点:替换apt-key导入密钥的命令
原来的curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -已经不能用了,现在需要用gpg --dearmor把微软的明文密钥转换成GPG二进制格式,然后放到/etc/apt/trusted.gpg.d/目录下(这是Debian现在推荐的“每个源对应单独密钥文件”的规范方式)。
给你改好的完整RUN代码块
把你Dockerfile里那个出问题的RUN段替换成下面这段:
# Install prerequisites for the sqlsrv and pdo_sqlsrv PHP extensions. # 替换了密钥导入方式,适配新的Debian镜像要求 RUN curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > /etc/apt/trusted.gpg.d/microsoft.gpg \ && curl https://packages.microsoft.com/config/debian/11/prod.list > /etc/apt/sources.list.d/mssql-release.list \ && echo "Package: unixodbc\nPin: origin \"packages.microsoft.com\"\nPin-Priority: 100\n" >> /etc/apt/preferences.d/microsoft \ && echo "Package: unixodbc-dev\nPin: origin \"packages.microsoft.com\"\nPin-Priority: 100\n" >> /etc/apt/preferences.d/microsoft \ && echo "Package: libodbc1:amd64\nPin: origin \"packages.microsoft.com\"\nPin-Priority: 100\n" >> /etc/apt/preferences.d/microsoft \ && echo "Package: odbcinst\nPin: origin \"packages.microsoft.com\"\nPin-Priority: 100\n" >> /etc/apt/preferences.d/microsoft \ && echo "Package: odbcinst1debian2:amd64\nPin: origin \"packages.microsoft.com\"\nPin-Priority: 100\n" >> /etc/apt/preferences.d/microsoft \ && apt-get update \ && apt-get install -y msodbcsql18 mssql-tools18 unixodbc-dev \ && rm -rf /var/lib/apt/lists/*
额外注意事项
还有个小细节要检查:你用的php:8.2-apache镜像可能已经悄悄更新到基于Debian 12(Bookworm)了,但你配置的微软源还是debian/11(Bullseye)。如果替换密钥后还是有问题,建议:
- 要么把源地址改成
https://packages.microsoft.com/config/debian/12/prod.list,适配Debian 12版本 - 要么直接固定镜像的Debian版本,比如用
FROM php:8.2-apache-bullseye来强制用Debian 11的基础镜像,避免自动更新带来的版本不匹配问题。
这样改完之后,再构建镜像应该就能顺利通过那个步骤了,我自己之前就是这么解决的~
内容来源于stack exchange
相关产品推荐
相关产品推荐

