You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dockerfile构建失败:Conda命令未找到,求正确配置方案

Dockerfile构建报错修正方案

问题描述

我是Docker及Dockerfile新手,需要创建Dockerfile以通过WDL在服务器部署应用,需求如下:

  • 创建Conda环境
  • 通过Mamba安装Snakemake
  • git克隆仓库并生成可执行文件,供Snakemake调用

尝试编写的Dockerfile如下,但构建时执行conda env create -f environment.yml报错:/bin/sh: conda: not found,退出码127。

原Dockerfile代码

# getting ubuntu base image & anaconda3 loaded
FROM ubuntu:latest
FROM continuumio/anaconda3:2021.05
FROM condaforge/mambaforge:latest
FROM snakemake/snakemake:stable

FROM node:alpine
RUN apk add --no-cache git
RUN apk add --no-cache openssh

MAINTAINER Name <email>

WORKDIR /home/xxx/Desktop/Pangenie

## ACTUAL PanGenIe INSTALLATION
RUN git clone https://github.com/eblerjana/pangenie.git /home/xxx/Desktop/Pangenie
# create the environment
RUN conda env create -f environment.yml
# build the executable
RUN conda activate pangenie
RUN mkdir build; cd build; cmake .. ; make

构建错误日志

[+] Building 1.7s (10/10) FINISHED
[internal] load build definition from Dockerfile                      
0.1s  => => transferring dockerfile: 708B                                                                                                                                                                                                        0.1s  => [internal] load .dockerignore                                                                                                                                                                                                           0.1s  => => transferring context: 2B                                                                                                                                                                                                             0.1s  => [internal] load metadata for docker.io/library/node:alpine                                                                                                                                                                              1.4s  => [auth] library/node:pull token for registry-1.docker.io                                                                                                                                                                                 0.0s  => [stage-4 1/6] FROM docker.io/library/node:alpine@sha256:1a04e2ec39cc0c3a9657c1d6f8291ea2f5ccadf6ef4521dec946e522833e87ea
0.0s  => CACHED [stage-4 2/6] RUN apk add --no-cache git                                                                                                                                                                                         0.0s  => CACHED [stage-4 3/6] RUN apk add --no-cache openssh                                                                                                                                                                                     0.0s  => CACHED [stage-4 4/6] WORKDIR /home/mat/Desktop/Pangenie                                                                                                                                                                                 0.0s  => CACHED [stage-4 5/6] RUN git clone https://github.com/eblerjana/pangenie.git /home/mat/Desktop/Pangenie  
0.0s  => ERROR [stage-4 6/6] RUN conda env create -f environment.yml                                                                                                                                                                             0.1s
[stage-4 6/6] RUN conda env create -f environment.yml:
#10 0.125 /bin/sh: conda: not found   executor failed running [/bin/sh -c conda env create -f environment.yml]: exit code: 127

错误原因

Dockerfile中多个FROM指令会触发多阶段构建,最终镜像只会继承最后一个FROM(即node:alpine)的环境,前面的ubuntu、anaconda、mambaforge等镜像的内容不会被包含,而alpine系统默认没有conda命令,因此报错。

此外还有两个问题:

  1. conda activate在Docker的RUN指令中默认无法直接生效,需要通过特定方式初始化环境。
  2. 克隆仓库时指定的目标目录与WORKDIR重复,可能导致目录覆盖或文件冲突。

修正后的Dockerfile

选择condaforge/mambaforge:latest作为基础镜像(自带conda和mamba),再安装所需工具:

# 使用自带conda和mamba的基础镜像
FROM condaforge/mambaforge:latest

# 维护者信息
MAINTAINER Name <email>

# 安装git、openssh及编译依赖工具
RUN apt-get update && apt-get install -y --no-install-recommends \
    git \
    openssh-client \
    cmake \
    make \
    && rm -rf /var/lib/apt/lists/*

# 设置工作目录
WORKDIR /home/Pangenie

# 克隆PanGenIe仓库到当前工作目录
RUN git clone https://github.com/eblerjana/pangenie.git .

# 使用mamba创建conda环境(比conda更快更稳定)
RUN mamba env create -f environment.yml

# 在指定conda环境下编译可执行文件
RUN conda run -n pangenie bash -c "mkdir build && cd build && cmake .. && make"

# 可选:设置默认启动命令(根据WDL需求调整)
CMD ["/bin/bash"]

关键修正点说明

  1. 单一基础镜像:仅保留condaforge/mambaforge:latest,确保conda和mamba直接可用。
  2. 完整依赖安装:通过apt-get安装git、openssh以及编译必需的cmake和make(基础镜像是debian系,使用apt而非apk)。
  3. 合理克隆路径:将仓库克隆到WORKDIR指定的目录,避免路径重复问题。
  4. mamba替代conda:用mamba创建环境,满足需求的同时提升安装速度。
  5. 正确激活环境:使用conda run -n pangenie在指定环境中执行编译命令,规避conda activate在RUN中失效的问题。

内容的提问来源于stack exchange,提问作者Matteo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 21:00:55