Azure Web App Service容器Docker启动失败排查求助
问题描述
我们的Azure基础设施包含VNet,现有一个Gradle应用,对应的Dockerfile如下:
FROM mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04 RUN rm /bin/sh && ln -s /bin/bash /bin/sh RUN echo "source /opt/miniconda/etc/profile.d/conda.sh && \ conda activate" >> ~/.bashrc COPY logic/ /app/logic COPY assets/ /app/assets COPY utils/ /app/utils COPY python_specs/sss_env.yml /app COPY app.py /app WORKDIR /app RUN source /opt/miniconda/etc/profile.d/conda.sh && \ conda activate && \ conda install conda && \ pip install cmake && \ conda env update -f sss_env.yml EXPOSE 8080 # conda: CMD ["conda", "run", "--no-capture-output", "-n", "sss-env", "python", "-m", "app", "--port", "8081"]
该镜像在本地可正常构建运行,DevOps流水线也能成功构建推送镜像,但部署Web App容器后,日志流显示如下错误:
2024-11-27T09:10:07.6520207Z ERROR conda.cli.main_run:execute(125):
conda run python -m app --port 8081failed. (See above for error)/home/LogFiles/2024_11_27_lw0sdlwk0006T6_default_scm_docker.log
我们已在Web App服务的环境变量中添加WEBSITE_PORT: 8081,但无法定位Docker命令失败的原因,需要协助排查。
补充信息
- 镜像通过ubuntu-latest Agent构建并推送到VNet集成的ACR
- Web App通过自托管Agent部署
- 构建时执行
RUN conda env list && conda list -n sss-env的输出如下:
# conda environments: # base * /opt/miniconda abs-env /opt/miniconda/envs/abs-env # packages in environment at /opt/miniconda/envs/abs-env: # # Name Version Build Channel _libgcc_mutex 0.1 conda_forge conda-forge _openmp_mutex 4.5 2_gnu conda-forge aiofiles 23.2.1 pypi_0 pypi annotated-types 0.7.0 pypi_0 pypi anyio 4.6.2.post1 pypi_0 pypi bzip2 1.0.8 h4bc722e_7 conda-forge ca-certificates 2024.8.30 hbcca054_0 conda-forge certifi 2024.8.30 pypi_0 pypi charset-normalizer 3.4.0 pypi_0 pypi click 8.1.7 pypi_0 pypi contourpy 1.3.1 pypi_0 pypi cycler 0.12.1 pypi_0 pypi et-xmlfile 2.0.0 pypi_0 pypi exceptiongroup 1.2.2 pypi_0 pypi faiss 1.7.2 py310hd7ef7d9_4_cpu conda-forge faiss-cpu 1.7.2 h718b53a_4 conda-forge fastapi 0.115.5 pypi_0 pypi ffmpy 0.4.0 pypi_0 pypi filelock 3.16.1 pypi_0 pypi fonttools 4.55.0 pypi_0 pypi fsspec 2024.10.0 pypi_0 pypi gradio 5.1.0 pypi_0 pypi gradio-client 1.4.0 pypi_0 pypi h11 0.14.0 pypi_0 pypi httpcore 1.0.7 pypi_0 pypi httpx 0.27.2 pypi_0 pypi huggingface-hub 0.26.2 pypi_0 pypi idna 3.10 pypi_0 pypi intel-openmp 2022.0.1 h06a4308_3633 jinja2 3.1.4 pypi_0 pypi joblib 1.4.2 pypi_0 pypi kiwisolver 1.4.7 pypi_0 pypi ld_impl_linux-64 2.43 h712a8e2_2 conda-forge libblas 3.9.0 25_linux64_openblas conda-forge libcblas 3.9.0 25_linux64_openblas conda-forge libfaiss 1.7.2 h2bc3f7f_0_cpu pytorch libfaiss-avx2 1.7.2 h1234567_4_cpu conda-forge libffi 3.4.2 h7f98852_5 conda-forge libgcc 14.2.0 h77fa898_1 conda-forge libgcc-ng 14.2.0 h69a702a_1 conda-forge libgfortran 14.2.0 h69a702a_1 conda-forge libgfortran5 14.2.0 hd5240d6_1 conda-forge libgomp 14.2.0 h77fa898_1 conda-forge liblapack 3.9.0 25_linux64_openblas conda-forge libnsl 2.0.1 hd590300_0 conda-forge libopenblas 0.3.28 pthreads_h94d23a6_1 conda-forge libsqlite 3.47.0 hadc24fc_1 conda-forge libstdcxx 14.2.0 hc0a3c3a_1 conda-forge libstdcxx-ng 14.2.0 h4852527_1 conda-forge libuuid 2.38.1 h0b41bf4_0 conda-forge libxcrypt 4.4.36 hd590300_1 conda-forge libzlib 1.3.1 hb9d3cd8_2 conda-forge markdown-it-py 3.0.0 pypi_0 pypi markupsafe 2.1.5 pypi_0 pypi matplotlib 3.7.1 pypi_0 pypi mdurl 0.1.2 pypi_0 pypi mkl 2022.1.0 hc2b9512_224 ncurses 6.5 he02047a_1 conda-forge numpy 1.26.4 py310hb13e2d6_0 conda-forge openpyxl 3.1.5 pypi_0 pypi openssl 3.4.0 hb9d3cd8_0 conda-forge orjson 3.10.12 pypi_0 pypi packaging 24.2 pypi_0 pypi pandas 2.0.0 pypi_0 pypi pillow 10.4.0 pypi_0 pypi pip 22.3.1 pyhd8ed1ab_0 conda-forge pydantic 2.10.1 pypi_0 pypi pydantic-core 2.27.1 pypi_0 pypi pydub 0.25.1 pypi_0 pypi pygments 2.18.0 pypi_0 pypi pyparsing 3.2.0 pypi_0 pypi python 3.10.15 h4a871b0_2_cpython conda-forge python-dateutil 2.9.0.post0 pypi_0 pypi python-multipart 0.0.17 pypi_0 pypi python_abi 3.10 5_cp310 conda-forge pytz 2024.2 pypi_0 pypi pyyaml 6.0.2 pypi_0 pypi readline 8.2 h8228510_1 conda-forge requests 2.32.3 pypi_0 pypi rich 13.9.4 pypi_0 pypi ruff 0.8.0 pypi_0 pypi scikit-learn 1.5.2 pypi_0 pypi scipy 1.14.1 pypi_0 pypi seaborn 0.12.2 pypi_0 pypi semantic-version 2.10.0 pypi_0 pypi setuptools 75.6.0 pyhff2d567_0 conda-forge shellingham 1.5.4 pypi_0 pypi six 1.16.0 pypi_0 pypi sniffio 1.3.1 pypi_0 pypi starlette 0.41.3 pypi_0 pypi stringcase 1.2.0 pypi_0 pypi threadpoolctl 3.5.0 pypi_0 pypi tk 8.6.13 noxft_h4845f30_101 conda-forge tomlkit 0.12.0 pypi_0 pypi tqdm 4.67.1 pypi_0 pypi typer 0.13.1 pypi_0 pypi typing-extensions 4.12.2 pypi_0 pypi tzdata 2024.2 pypi_0 pypi urllib3 2.2.3 pypi_0 pypi uvicorn 0.32.1 pypi_0 pypi websockets 12.0 pypi_0 pypi wheel 0.45.1 pyhd8ed1ab_0 conda-forge xz 5.2.6 h166bdaf_0 conda-forge
排查建议
1. 修正conda环境名称不匹配问题
从构建日志的conda env list输出看,实际创建的conda环境是abs-env,但Dockerfile的CMD命令里指定的是sss-env,这是核心错误:
- 检查
sss_env.yml文件,确认其中的name字段是否设置为abs-env - 修改CMD命令中的环境名称为
abs-env:CMD ["conda", "run", "--no-capture-output", "-n", "abs-env", "python", "-m", "app", "--port", "8081"]
2. 解决非交互式shell的conda加载问题
Azure Web App运行容器时默认使用非交互式shell,~/.bashrc中的conda初始化脚本不会自动执行,可能导致conda命令无法正常识别:
- 直接使用conda的完整路径执行命令,避免依赖shell初始化:
CMD ["/opt/miniconda/bin/conda", "run", "--no-capture-output", "-n", "abs-env", "python", "-m", "app", "--port", "8081"] - 或者切换到shell模式执行,确保conda环境正常加载:
CMD ["/bin/bash", "-c", "source /opt/miniconda/etc/profile.d/conda.sh && conda activate abs-env && python -m app --port 8081"]
3. 获取应用启动的详细错误信息
当前日志仅提示命令失败,未显示具体错误内容,可通过以下方式排查:
- 修改CMD命令移除
--no-capture-output参数,让错误信息直接输出到日志:CMD ["conda", "run", "-n", "abs-env", "python", "-m", "app", "--port", "8081"] - 通过Azure门户或
az webapp ssh命令登录Web App容器实例,手动执行启动命令,查看具体报错:source /opt/miniconda/etc/profile.d/conda.sh conda activate abs-env python -m app --port 8081
4. 统一端口配置
- Dockerfile中
EXPOSE 8080与应用启动端口8081不一致,建议修改为EXPOSE 8081,保持配置统一 - 确认应用代码是否正确读取
--port参数,是否存在硬编码端口的情况
5. 验证ACR镜像一致性
虽然本地构建正常,但需确保流水线构建的镜像与本地一致:
- 在流水线中增加验证步骤,检查镜像内的conda环境名称和文件结构
- 从ACR拉取镜像到本地测试运行,确认是否能正常启动
内容的提问来源于stack exchange,提问作者Obiii
相关产品推荐
相关产品推荐

