LeoYML commited on
Commit
29a9f1e
·
1 Parent(s): 9ea4689

update dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +169 -176
Dockerfile CHANGED
@@ -1,177 +1,170 @@
1
  # --- Stage 1: Builder ---
2
- FROM openfoam/openfoam10-paraview510:latest AS builder
3
- USER root
4
-
5
- # Install base utilities (including ca-certificates for SSL)
6
- RUN apt-get update \
7
- && apt-get install -y \
8
- build-essential \
9
- wget \
10
- git \
11
- python3 \
12
- python3-pip \
13
- libboost-all-dev \
14
- ca-certificates \
15
- && rm -rf /var/lib/apt/lists/*
16
-
17
- # Download and install Miniconda directly
18
- ENV CONDA_DIR=/opt/conda
19
- ENV PATH=$CONDA_DIR/bin:$PATH
20
- RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /tmp/Miniconda3-latest-Linux-x86_64.sh \
21
- && bash /tmp/Miniconda3-latest-Linux-x86_64.sh -b -p "$CONDA_DIR" \
22
- && rm -f /tmp/Miniconda3-latest-Linux-x86_64.sh \
23
- && ln -s "$CONDA_DIR/bin/conda" /usr/bin/conda \
24
- && conda --version
25
-
26
- # Clone Foam-Agent repository directly
27
- ENV FoamAgent_PATH="/home/openfoam/Foam-Agent"
28
- WORKDIR /home/openfoam
29
- RUN git clone https://github.com/csml-rpi/Foam-Agent.git
30
- RUN git -C Foam-Agent checkout mcp
31
-
32
- # Switch to bash to source OpenFOAM environment
33
- SHELL ["/bin/bash", "-c"]
34
-
35
- # Create the Foam-Agent environment
36
- WORKDIR $FoamAgent_PATH
37
- RUN conda config --add channels conda-forge && \
38
- conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main && \
39
- conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r && \
40
- conda env create --file environment.yml --yes
41
-
42
- # Initialize conda for bash (automatic setup)
43
- RUN conda init bash && \
44
- echo "conda activate FoamAgent" >> ~/.bashrc
45
-
46
- # Source OpenFOAM and verify
47
- RUN source /opt/openfoam10/etc/bashrc && \
48
- echo "WM_PROJECT_DIR: $WM_PROJECT_DIR"
49
-
50
- RUN conda clean --all --yes && \
51
- rm -rf "$CONDA_DIR/pkgs" && \
52
- apt-get clean && \
53
- rm -rf /var/lib/apt/lists/*
54
-
55
- # --- Stage 2: Runtime ---
56
- FROM openfoam/openfoam10-paraview510:latest
57
- USER root
58
-
59
- # Install runtime dependencies
60
- RUN apt-get update \
61
- && apt-get install -y \
62
- git \
63
- libboost-all-dev \
64
- ca-certificates \
65
- && rm -rf /var/lib/apt/lists/*
66
-
67
- # Environment variables in a FoamAgent container
68
- ENV CONDA_DIR="/opt/conda"
69
- ENV PATH=$CONDA_DIR/bin:$PATH
70
- ENV FoamAgent_PATH="/home/openfoam/Foam-Agent"
71
- ENV PYTHONPATH="$FoamAgent_PATH/src:$PYTHONPATH"
72
- # ENV FOAM_AGENT_MODE="api"
73
- ENV FOAM_AGENT_MODE="mcp"
74
- ENV FOAM_AGENT_PORT="7860"
75
- ENV MCP_TRANSPORT="http"
76
- ENV MCP_PORT="7860"
77
- ENV MCP_HOST="0.0.0.0"
78
-
79
- EXPOSE 7860
80
-
81
- # Copy Conda runtime and Foam-Agent from builder
82
- COPY --from=builder $CONDA_DIR $CONDA_DIR
83
- COPY --from=builder $FoamAgent_PATH $FoamAgent_PATH
84
- COPY --from=builder /root/.bashrc /root/.bashrc
85
-
86
- # Ensure conda is properly initialized in .bashrc for interactive shells
87
- RUN echo '' >> /root/.bashrc && \
88
- echo '# Auto-activate FoamAgent environment' >> /root/.bashrc && \
89
- echo 'if [ -f "$CONDA_DIR/etc/profile.d/conda.sh" ]; then' >> /root/.bashrc && \
90
- echo ' source "$CONDA_DIR/etc/profile.d/conda.sh"' >> /root/.bashrc && \
91
- echo ' conda activate FoamAgent 2>/dev/null || true' >> /root/.bashrc && \
92
- echo 'fi' >> /root/.bashrc && \
93
- echo '' >> /root/.bashrc && \
94
- echo '# Auto-source OpenFOAM' >> /root/.bashrc && \
95
- echo 'if [ -f /opt/openfoam10/etc/bashrc ]; then' >> /root/.bashrc && \
96
- echo ' source /opt/openfoam10/etc/bashrc' >> /root/.bashrc && \
97
- echo 'fi' >> /root/.bashrc && \
98
- echo '' >> /root/.bashrc && \
99
- echo '# Auto-change to Foam-Agent directory' >> /root/.bashrc && \
100
- echo 'cd "$FoamAgent_PATH" 2>/dev/null || true' >> /root/.bashrc
101
-
102
- # Create startup script inline (no heredoc, no extra files)
103
- RUN printf '%s\n' '#!/bin/bash' \
104
- 'set -e' \
105
- '' \
106
- '# Source OpenFOAM environment in a controlled way: allow non-zero RC, then validate' \
107
- 'set +e' \
108
- 'source /opt/openfoam10/etc/bashrc' \
109
- 'openfoam_rc=$?' \
110
- 'set -e' \
111
- '' \
112
- '# Strict validation: must have WM_PROJECT_DIR and blockMesh in PATH' \
113
- 'if [ -z "$WM_PROJECT_DIR" ] || ! command -v blockMesh >/dev/null 2>&1; then' \
114
- ' echo "ERROR: OpenFOAM environment failed to load (rc=$openfoam_rc)." >&2' \
115
- ' echo "Diag: WM_PROJECT_DIR='"'"'${WM_PROJECT_DIR:-unset}'"'"', blockMesh=$(command -v blockMesh || echo '"'"'NOT-IN-PATH'"'"')" >&2' \
116
- ' exit 1' \
117
- 'fi' \
118
- '' \
119
- '# Initialize conda' \
120
- 'source "$CONDA_DIR/etc/profile.d/conda.sh"' \
121
- '' \
122
- '# Activate FoamAgent environment' \
123
- 'conda activate FoamAgent' \
124
- '' \
125
- '# Change to Foam-Agent directory' \
126
- 'cd "$FoamAgent_PATH"' \
127
- '' \
128
- '# Display welcome message' \
129
- 'echo "=========================================="' \
130
- 'echo "Foam-Agent Docker Container Ready!"' \
131
- 'echo "=========================================="' \
132
- 'echo "OpenFOAM: $WM_PROJECT_DIR"' \
133
- 'echo "Conda Env: FoamAgent (activated)"' \
134
- 'echo "Working Dir: $FoamAgent_PATH"' \
135
- 'echo ""' \
136
- 'echo "To update to latest Foam-Agent:"' \
137
- 'echo " cd $FoamAgent_PATH && git pull"' \
138
- 'echo ""' \
139
- 'echo "To run Foam-Agent:"' \
140
- 'echo " python foambench_main.py --openfoam_path $WM_PROJECT_DIR --output ./output --prompt_path ./user_requirement.txt"' \
141
- 'echo ""' \
142
- 'echo "Note: Make sure OPENAI_API_KEY is set before running!"' \
143
- 'echo "=========================================="' \
144
- '' \
145
- 'if [[ "$#" -gt 0 ]]; then' \
146
- ' exec "$@"' \
147
- 'fi' \
148
- '' \
149
- 'MODE="${FOAM_AGENT_MODE:-api}"' \
150
- 'PORT="${FOAM_AGENT_PORT:-7860}"' \
151
- '' \
152
- 'if [[ "$MODE" == "mcp" ]]; then' \
153
- ' exec python -m src.mcp.start_mcp' \
154
- 'fi' \
155
- '' \
156
- 'exec uvicorn app:app --host 0.0.0.0 --port "$PORT"' \
157
- > /usr/local/bin/foamagent-entrypoint.sh && chmod +x /usr/local/bin/foamagent-entrypoint.sh
158
-
159
- # ============================================================================
160
- # Uncomment to exclude root access but create a larger image
161
- # ============================================================================
162
- # # Ensure openfoam user owns entire home directory
163
- # RUN chown -R openfoam:openfoam /home/openfoam
164
-
165
- # # Switch to non-root user
166
- # USER openfoam
167
- # ============================================================================
168
-
169
- # Set default working directory
170
- WORKDIR /home/openfoam/
171
-
172
- # Use the custom entrypoint script
173
- ENTRYPOINT ["/usr/local/bin/foamagent-entrypoint.sh"]
174
-
175
- # CMD ["/bin/bash"]
176
- CMD ["__auto__"]
177
-
 
1
  # --- Stage 1: Builder ---
2
+ FROM openfoam/openfoam10-paraview510:latest AS builder
3
+ USER root
4
+
5
+ # Install base utilities (including ca-certificates for SSL)
6
+ RUN apt-get update \
7
+ && apt-get install -y \
8
+ build-essential \
9
+ wget \
10
+ git \
11
+ python3 \
12
+ python3-pip \
13
+ libboost-all-dev \
14
+ ca-certificates \
15
+ && rm -rf /var/lib/apt/lists/*
16
+
17
+ # Download and install Miniconda directly
18
+ ENV CONDA_DIR=/opt/conda
19
+ ENV PATH=$CONDA_DIR/bin:$PATH
20
+ RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /tmp/Miniconda3-latest-Linux-x86_64.sh \
21
+ && bash /tmp/Miniconda3-latest-Linux-x86_64.sh -b -p "$CONDA_DIR" \
22
+ && rm -f /tmp/Miniconda3-latest-Linux-x86_64.sh \
23
+ && ln -s "$CONDA_DIR/bin/conda" /usr/bin/conda \
24
+ && conda --version
25
+
26
+ # Clone Foam-Agent repository directly
27
+ ENV FoamAgent_PATH="/home/openfoam/Foam-Agent"
28
+ WORKDIR /home/openfoam
29
+ RUN git clone https://github.com/csml-rpi/Foam-Agent.git
30
+
31
+ # Switch to bash to source OpenFOAM environment
32
+ SHELL ["/bin/bash", "-c"]
33
+
34
+ # Create the Foam-Agent environment
35
+ WORKDIR $FoamAgent_PATH
36
+ RUN conda config --add channels conda-forge && \
37
+ conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main && \
38
+ conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r && \
39
+ conda env create --file environment.yml --yes
40
+
41
+ # Initialize conda for bash (automatic setup)
42
+ RUN conda init bash && \
43
+ echo "conda activate FoamAgent" >> ~/.bashrc
44
+
45
+ # Source OpenFOAM and verify
46
+ RUN source /opt/openfoam10/etc/bashrc && \
47
+ echo "WM_PROJECT_DIR: $WM_PROJECT_DIR"
48
+
49
+ RUN conda clean --all --yes && \
50
+ rm -rf "$CONDA_DIR/pkgs" && \
51
+ apt-get clean && \
52
+ rm -rf /var/lib/apt/lists/*
53
+
54
+ # --- Stage 2: Runtime ---
55
+ FROM openfoam/openfoam10-paraview510:latest
56
+ USER root
57
+
58
+ # Install runtime dependencies
59
+ RUN apt-get update \
60
+ && apt-get install -y \
61
+ git \
62
+ libboost-all-dev \
63
+ ca-certificates \
64
+ && rm -rf /var/lib/apt/lists/*
65
+
66
+ # Environment variables in a FoamAgent container
67
+ ENV CONDA_DIR="/opt/conda"
68
+ ENV PATH=$CONDA_DIR/bin:$PATH
69
+ ENV FoamAgent_PATH="/home/openfoam/Foam-Agent"
70
+
71
+ # Copy Conda runtime and Foam-Agent from builder
72
+ COPY --from=builder $CONDA_DIR $CONDA_DIR
73
+ COPY --from=builder $FoamAgent_PATH $FoamAgent_PATH
74
+ COPY --from=builder /root/.bashrc /root/.bashrc
75
+
76
+ # Ensure conda is properly initialized in .bashrc for interactive shells
77
+ RUN echo '' >> /root/.bashrc && \
78
+ echo '# Auto-activate FoamAgent environment' >> /root/.bashrc && \
79
+ echo 'if [ -f "$CONDA_DIR/etc/profile.d/conda.sh" ]; then' >> /root/.bashrc && \
80
+ echo ' source "$CONDA_DIR/etc/profile.d/conda.sh"' >> /root/.bashrc && \
81
+ echo ' conda activate FoamAgent 2>/dev/null || true' >> /root/.bashrc && \
82
+ echo 'fi' >> /root/.bashrc && \
83
+ echo '' >> /root/.bashrc && \
84
+ echo '# Auto-source OpenFOAM' >> /root/.bashrc && \
85
+ echo 'if [ -f /opt/openfoam10/etc/bashrc ]; then' >> /root/.bashrc && \
86
+ echo ' source /opt/openfoam10/etc/bashrc' >> /root/.bashrc && \
87
+ echo 'fi' >> /root/.bashrc && \
88
+ echo '' >> /root/.bashrc && \
89
+ echo '# Auto-change to Foam-Agent directory' >> /root/.bashrc && \
90
+ echo 'cd "$FoamAgent_PATH" 2>/dev/null || true' >> /root/.bashrc
91
+
92
+ # Create a startup script that automatically sets up everything
93
+ RUN cat > /usr/local/bin/foamagent-entrypoint.sh << 'EOFSCRIPT'
94
+ #!/bin/bash
95
+ set -e
96
+
97
+ # Source OpenFOAM environment in a controlled way: allow non-zero RC, then validate
98
+ set +e
99
+ source /opt/openfoam10/etc/bashrc
100
+ openfoam_rc=$?
101
+ set -e
102
+
103
+ # Strict validation: must have WM_PROJECT_DIR and blockMesh in PATH
104
+ if [ -z "$WM_PROJECT_DIR" ] || ! command -v blockMesh >/dev/null 2>&1; then
105
+ echo "ERROR: OpenFOAM environment failed to load (rc=$openfoam_rc)." >&2
106
+ echo "Diag: WM_PROJECT_DIR='${WM_PROJECT_DIR:-unset}', blockMesh=$(command -v blockMesh || echo 'NOT-IN-PATH')" >&2
107
+ exit 1
108
+ fi
109
+
110
+ # Initialize conda
111
+ source "$CONDA_DIR/etc/profile.d/conda.sh"
112
+
113
+ # Activate FoamAgent environment
114
+ conda activate FoamAgent
115
+
116
+ # Change to Foam-Agent directory
117
+ cd "$FoamAgent_PATH"
118
+
119
+ # Display welcome message
120
+ echo "=========================================="
121
+ echo "Foam-Agent Docker Container Ready!"
122
+ echo "=========================================="
123
+ echo "OpenFOAM: $WM_PROJECT_DIR"
124
+ echo "Conda Env: FoamAgent (activated)"
125
+ echo "Working Dir: $FoamAgent_PATH"
126
+ echo ""
127
+ echo "To update to latest Foam-Agent:"
128
+ echo " cd $FoamAgent_PATH && git pull"
129
+ echo ""
130
+ echo "To run Foam-Agent:"
131
+ echo " python foambench_main.py --openfoam_path \$WM_PROJECT_DIR --output ./output --prompt_path ./user_requirement.txt"
132
+ echo ""
133
+ echo "Note: Make sure OPENAI_API_KEY is set before running!"
134
+ echo "=========================================="
135
+
136
+ # Execute the command passed to the container
137
+ if [ "$1" = "/bin/bash" ] || [ "$1" = "bash" ] || [ -z "$1" ]; then
138
+ exec /bin/bash -i
139
+ else
140
+ exec "$@"
141
+ fi
142
+ EOFSCRIPT
143
+ RUN chmod +x /usr/local/bin/foamagent-entrypoint.sh
144
+
145
+ # ============================================================================
146
+ # Uncomment to exclude root access but create a larger image
147
+ # ============================================================================
148
+ # # Ensure openfoam user owns entire home directory
149
+ # RUN chown -R openfoam:openfoam /home/openfoam
150
+
151
+ # # Switch to non-root user
152
+ # USER openfoam
153
+ # ============================================================================
154
+
155
+ # Set default working directory
156
+ WORKDIR $FoamAgent_PATH
157
+
158
+ # Expose port 7860 for MCP HTTP service
159
+ EXPOSE 7860
160
+
161
+ # Environment variables for MCP service
162
+ ENV MCP_TRANSPORT=http
163
+ ENV MCP_HOST=0.0.0.0
164
+ ENV MCP_PORT=7860
165
+
166
+ # Use the custom entrypoint script
167
+ ENTRYPOINT ["/usr/local/bin/foamagent-entrypoint.sh"]
168
+
169
+ # Run MCP server by default (can override with: docker run <image> /bin/bash)
170
+ CMD ["python", "-m", "src.mcp.start_mcp"]