Windows+WSL2严格证书网络中MLflow Docker构建SSL认证故障排查
解决自签名证书环境下MLflow Docker构建的SSL问题
一、别改源码!核心思路是复用证书配置
你在WSL2里直接装Docker能成功,就是因为构建过程用了WSL里的.bashrc、git和pip的证书配置。而Windows Docker Desktop默认没继承这些,所以才会各种SSL报错。正确做法是让Docker构建时能拿到信任的自签名证书,而不是去改MLflow源码禁用SSL。
二、方案1:让Windows Docker Desktop复用WSL2的配置
- 确保Docker Desktop用的是WSL2后端(设置里能看到,没开的话打开就行)
- 把WSL2里的证书同步到Windows侧,比如在WSL里执行:
cat /etc/ssl/certs/your-selfsigned.crt > /mnt/c/Users/你的用户名/certs/selfsigned.crt - 修改Docker Desktop的守护进程配置:
- 打开Docker Desktop设置 → Docker Engine,添加以下内容(注意替换成你的证书路径和内部仓库):
{ "insecure-registries": ["你的内部镜像仓库地址"], "ca-certificates": ["C:\\Users\\你的用户名\\certs\\selfsigned.crt"] } - 重启Docker Desktop
- 打开Docker Desktop设置 → Docker Engine,添加以下内容(注意替换成你的证书路径和内部仓库):
- 尽量在WSL2的终端里执行MLflow构建命令,而不是Windows的cmd/powershell——这样Docker会用WSL的上下文,自动带上你的git、pip配置。
三、方案2:自定义Dockerfile,彻底绕开MLflow默认构建
这是最灵活的方式,步骤如下:
- 先把MLflow模型导出到本地:
mlflow models export -m "runs:/25432534435423/Clustering" -o ./exported_model - 自己写Dockerfile,参考MLflow默认模板,加上证书信任配置:
# 用和MLflow默认一致的基础镜像,比如python:3.9-slim FROM python:3.9-slim # 复制你的自签名证书到系统信任目录 COPY ./selfsigned.crt /usr/local/share/ca-certificates/ RUN update-ca-certificates # 给pip设置证书和信任站点 ENV PIP_CERT=/usr/local/share/ca-certificates/selfsigned.crt ENV PIP_TRUSTED_HOST=你的内部pypi站点,pypi.org,files.pythonhosted.org # 给git设置证书 RUN git config --global http.sslCAInfo /usr/local/share/ca-certificates/selfsigned.crt # 复制导出的模型文件 COPY ./exported_model /opt/ml/model # 安装MLserver和依赖(因为你用了--enable-mlserver) RUN pip install mlserver mlserver-mlflow # 启动命令 CMD ["mlserver", "start", "/opt/ml/model"] - 手动构建镜像:
docker build -t myco_ml/myco_ml_cluster:20241007 .
四、方案3:给MLflow构建命令注入证书参数
不用改源码,通过--build-arg传递证书配置,还能自定义Docker模板:
- 先准备好自定义的Docker模板文件(比如
custom_docker_template.j2),添加构建参数相关的配置:ARG SSL_CERT_FILE ARG PIP_CERT ARG PIP_TRUSTED_HOST ARG GIT_SSL_CAINFO COPY ./selfsigned.crt /usr/local/share/ca-certificates/ RUN update-ca-certificates ENV SSL_CERT_FILE=$SSL_CERT_FILE ENV PIP_CERT=$PIP_CERT ENV PIP_TRUSTED_HOST=$PIP_TRUSTED_HOST ENV GIT_SSL_CAINFO=$GIT_SSL_CAINFO # 下面保留MLflow默认模板的其他内容,比如安装依赖、复制模型等 - 在WSL终端执行MLflow命令,加上构建参数和模板指定:
mlflow models build-docker -m "runs:/25432534435423/Clustering" -n myco_ml/myco_ml_cluster:20241007 --enable-mlserver \ --docker-template ./custom_docker_template.j2 \ --build-arg SSL_CERT_FILE=/usr/local/share/ca-certificates/selfsigned.crt \ --build-arg PIP_CERT=/usr/local/share/ca-certificates/selfsigned.crt \ --build-arg PIP_TRUSTED_HOST=你的内部pypi站点 \ --build-arg GIT_SSL_CAINFO=/usr/local/share/ca-certificates/selfsigned.crt
内容的提问来源于stack exchange,提问作者pauljohn32
相关产品推荐
相关产品推荐

