| |
| FROM openfoam/openfoam10:latest AS builder |
| USER root |
|
|
| |
| RUN apt-get update \ |
| && apt-get install -y \ |
| build-essential \ |
| wget \ |
| git \ |
| python3 \ |
| python3-pip \ |
| libboost-all-dev \ |
| ca-certificates \ |
| && rm -rf /var/lib/apt/lists/* |
|
|
| |
| ENV CONDA_DIR=/opt/conda |
| ENV PATH=$CONDA_DIR/bin:$PATH |
| RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /tmp/Miniconda3-latest-Linux-x86_64.sh \ |
| && bash /tmp/Miniconda3-latest-Linux-x86_64.sh -b -p "$CONDA_DIR" \ |
| && rm -f /tmp/Miniconda3-latest-Linux-x86_64.sh \ |
| && ln -s "$CONDA_DIR/bin/conda" /usr/bin/conda \ |
| && conda --version |
|
|
| |
| ENV FoamAgent_PATH="/home/openfoam/Foam-Agent" |
| WORKDIR /home/openfoam |
| |
| |
|
|
| |
| SHELL ["/bin/bash", "-c"] |
|
|
| |
| WORKDIR $FoamAgent_PATH |
| RUN conda config --add channels conda-forge && \ |
| conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main && \ |
| conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r && \ |
| conda env create --file environment.yml --yes |
|
|
| |
| RUN conda init bash && \ |
| echo "conda activate FoamAgent" >> ~/.bashrc |
|
|
| |
| RUN source /opt/openfoam10/etc/bashrc && \ |
| echo "WM_PROJECT_DIR: $WM_PROJECT_DIR" |
|
|
| RUN conda clean --all --yes && \ |
| rm -rf "$CONDA_DIR/pkgs" && \ |
| apt-get clean && \ |
| rm -rf /var/lib/apt/lists/* |
|
|
| |
| FROM openfoam/openfoam10:latest |
| USER root |
|
|
| |
| RUN apt-get update \ |
| && apt-get install -y \ |
| git \ |
| libboost-all-dev \ |
| ca-certificates \ |
| && rm -rf /var/lib/apt/lists/* |
|
|
| |
| ENV CONDA_DIR="/opt/conda" |
| ENV PATH=$CONDA_DIR/bin:$PATH |
| ENV FoamAgent_PATH="/home/openfoam/Foam-Agent" |
|
|
| |
| COPY --from=builder $CONDA_DIR $CONDA_DIR |
| COPY --from=builder $FoamAgent_PATH $FoamAgent_PATH |
| COPY --from=builder /root/.bashrc /root/.bashrc |
|
|
| |
| RUN echo '' >> /root/.bashrc && \ |
| echo '# Auto-activate FoamAgent environment' >> /root/.bashrc && \ |
| echo 'if [ -f "$CONDA_DIR/etc/profile.d/conda.sh" ]; then' >> /root/.bashrc && \ |
| echo ' source "$CONDA_DIR/etc/profile.d/conda.sh"' >> /root/.bashrc && \ |
| echo ' conda activate FoamAgent 2>/dev/null || true' >> /root/.bashrc && \ |
| echo 'fi' >> /root/.bashrc && \ |
| echo '' >> /root/.bashrc && \ |
| echo '# Auto-source OpenFOAM' >> /root/.bashrc && \ |
| echo 'if [ -f /opt/openfoam10/etc/bashrc ]; then' >> /root/.bashrc && \ |
| echo ' source /opt/openfoam10/etc/bashrc' >> /root/.bashrc && \ |
| echo 'fi' >> /root/.bashrc && \ |
| echo '' >> /root/.bashrc && \ |
| echo '# Auto-change to Foam-Agent directory' >> /root/.bashrc && \ |
| echo 'cd "$FoamAgent_PATH" 2>/dev/null || true' >> /root/.bashrc |
|
|
| |
| RUN printf '%s\n' \ |
| '#!/bin/bash' \ |
| 'set -e' \ |
| '' \ |
| '# Source OpenFOAM environment in a controlled way: allow non-zero RC, then validate' \ |
| 'set +e' \ |
| 'source /opt/openfoam10/etc/bashrc' \ |
| 'openfoam_rc=$?' \ |
| 'set -e' \ |
| '' \ |
| '# Strict validation: must have WM_PROJECT_DIR and blockMesh in PATH' \ |
| 'if [ -z "$WM_PROJECT_DIR" ] || ! command -v blockMesh >/dev/null 2>&1; then' \ |
| ' echo "ERROR: OpenFOAM environment failed to load (rc=$openfoam_rc)." >&2' \ |
| ' echo "Diag: WM_PROJECT_DIR='"'"'${WM_PROJECT_DIR:-unset}'"'"', blockMesh=$(command -v blockMesh || echo '"'"'NOT-IN-PATH'"'"')" >&2' \ |
| ' exit 1' \ |
| 'fi' \ |
| '' \ |
| '# Initialize conda' \ |
| 'source "$CONDA_DIR/etc/profile.d/conda.sh"' \ |
| '' \ |
| '# Activate FoamAgent environment' \ |
| 'conda activate FoamAgent' \ |
| '' \ |
| '# Change to Foam-Agent directory' \ |
| 'cd "$FoamAgent_PATH"' \ |
| '' \ |
| '# Display welcome message' \ |
| 'echo "=========================================="' \ |
| 'echo "Foam-Agent Docker Container Ready!"' \ |
| 'echo "=========================================="' \ |
| 'echo "OpenFOAM: $WM_PROJECT_DIR"' \ |
| 'echo "Conda Env: FoamAgent (activated)"' \ |
| 'echo "Working Dir: $FoamAgent_PATH"' \ |
| 'echo ""' \ |
| 'echo "To update to latest Foam-Agent:"' \ |
| 'echo " cd $FoamAgent_PATH && git pull"' \ |
| 'echo ""' \ |
| 'echo "To run Foam-Agent:"' \ |
| 'echo " python foambench_main.py --openfoam_path \$WM_PROJECT_DIR --output ./output --prompt_path ./user_requirement.txt"' \ |
| 'echo ""' \ |
| 'echo "Note: Make sure OPENAI_API_KEY is set before running!"' \ |
| 'echo "=========================================="' \ |
| '' \ |
| '# Execute the command passed to the container' \ |
| 'if [ "$1" = "/bin/bash" ] || [ "$1" = "bash" ] || [ -z "$1" ]; then' \ |
| ' exec /bin/bash -i' \ |
| 'else' \ |
| ' exec "$@"' \ |
| 'fi' \ |
| > /usr/local/bin/foamagent-entrypoint.sh && \ |
| chmod +x /usr/local/bin/foamagent-entrypoint.sh |
|
|
| |
| |
| |
| |
| |
|
|
| |
| |
| |
|
|
| |
| WORKDIR $FoamAgent_PATH |
|
|
| |
| EXPOSE 7860 |
|
|
| |
| ENV MCP_TRANSPORT=http |
| ENV MCP_HOST=0.0.0.0 |
| ENV MCP_PORT=7860 |
|
|
| |
| ENTRYPOINT ["/usr/local/bin/foamagent-entrypoint.sh"] |
|
|
| |
| CMD ["python", "src/mcp/start_mcp.py"] |