1
1
# Ubuntu 22.04 LTS - Jammy
2
- ARG BASE_IMAGE=ubuntu:jammy-20240125
2
+ ARG BASE_IMAGE=ubuntu:jammy-20250730
3
3
4
4
#
5
5
# Build wheel
@@ -14,9 +14,9 @@ RUN uv build --wheel /src
14
14
#
15
15
16
16
# Utilities for downloading packages
17
- FROM ${BASE_IMAGE} as downloader
17
+ FROM ${BASE_IMAGE} AS downloader
18
18
# Bump the date to current to refresh curl/certificates/etc
19
- RUN echo "2023.07.20 "
19
+ RUN echo "2025.09.25 "
20
20
RUN apt-get update && \
21
21
apt-get install -y --no-install-recommends \
22
22
binutils \
@@ -28,64 +28,47 @@ RUN apt-get update && \
28
28
29
29
RUN update-ca-certificates -f
30
30
31
- # FreeSurfer 7.3.2
32
- FROM downloader as freesurfer
33
- COPY docker/files/freesurfer7.3.2-exclude.txt /usr/local/etc/freesurfer7.3.2-exclude.txt
34
- COPY docker/files/fs-cert.pem /usr/local/etc/fs-cert.pem
35
- RUN curl --cacert /usr/local/etc/fs-cert.pem \
36
- -sSL https://surfer.nmr.mgh.harvard.edu/pub/dist/freesurfer/7.3.2/freesurfer-linux-ubuntu22_amd64-7.3.2.tar.gz \
37
- | tar zxv --no-same-owner -C /opt --exclude-from=/usr/local/etc/freesurfer7.3.2-exclude.txt
38
-
39
31
# Micromamba
40
- FROM downloader as micromamba
41
-
42
- # Install a C compiler to build extensions when needed.
43
- # traits<6.4 wheels are not available for Python 3.11+, but build easily.
44
- RUN apt-get update && \
45
- apt-get install -y --no-install-recommends build-essential && \
46
- apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
32
+ FROM downloader AS micromamba
47
33
48
34
WORKDIR /
49
35
# Bump the date to current to force update micromamba
50
- RUN echo "2024.02.06 "
36
+ RUN echo "2025.09.05 "
51
37
RUN curl -Ls https://micro.mamba.pm/api/micromamba/linux-64/latest | tar -xvj bin/micromamba
52
38
53
39
ENV MAMBA_ROOT_PREFIX="/opt/conda"
54
40
COPY env.yml /tmp/env.yml
55
- # COPY requirements.txt /tmp/requirements.txt
56
41
WORKDIR /tmp
57
42
RUN micromamba create -y -f /tmp/env.yml && \
58
43
micromamba clean -y -a
59
44
60
45
#
61
46
# Main stage
62
47
#
63
- FROM ${BASE_IMAGE} as nitransforms
48
+ FROM ${BASE_IMAGE} AS nitransforms
64
49
65
50
# Configure apt
66
51
ENV DEBIAN_FRONTEND="noninteractive" \
67
52
LANG="en_US.UTF-8" \
68
53
LC_ALL="en_US.UTF-8"
69
54
70
- # Some baseline tools; bc is needed for FreeSurfer, so don't drop it
71
55
RUN apt-get update && \
72
56
apt-get install -y --no-install-recommends \
73
- bc \
74
- ca-certificates \
75
- curl \
76
- libgomp1 \
77
- lsb-release \
78
- netbase \
79
- xvfb && \
57
+ libexpat1 \
58
+ libgomp1 \
59
+ && \
80
60
apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
81
61
82
- # Install files from stages
83
- COPY --from=freesurfer /opt/freesurfer /opt/freesurfer
62
+ # Install FreeSurfer and AFNI bins from images
63
+ COPY --from=freesurfer/freesurfer:7.4.1 \
64
+ /usr/local/freesurfer/bin/mri_vol2vol \
65
+ /usr/local/freesurfer/bin/
84
66
COPY --from=afni/afni_make_build:AFNI_25.2.09 \
85
67
/opt/afni/install/libf2c.so \
86
68
/opt/afni/install/libmri.so \
87
69
/usr/local/lib/
88
70
COPY --from=afni/afni_make_build:AFNI_25.2.09 \
71
+ /opt/afni/install/3dAllineate \
89
72
/opt/afni/install/3dNwarpApply \
90
73
/opt/afni/install/3dWarp \
91
74
/opt/afni/install/3drefit \
@@ -97,41 +80,27 @@ ENV OS="Linux" \
97
80
FS_OVERRIDE=0 \
98
81
FIX_VERTEX_AREA="" \
99
82
FSF_OUTPUT_FORMAT="nii.gz" \
100
- FREESURFER_HOME="/opt /freesurfer"
83
+ FREESURFER_HOME="/usr/local /freesurfer"
101
84
ENV SUBJECTS_DIR="$FREESURFER_HOME/subjects" \
102
85
FUNCTIONALS_DIR="$FREESURFER_HOME/sessions" \
103
- MNI_DIR="$FREESURFER_HOME/mni" \
104
86
LOCAL_DIR="$FREESURFER_HOME/local" \
105
- MINC_BIN_DIR="$FREESURFER_HOME/mni/bin" \
106
- MINC_LIB_DIR="$FREESURFER_HOME/mni/lib" \
107
- MNI_DATAPATH="$FREESURFER_HOME/mni/data"
108
- ENV PERL5LIB="$MINC_LIB_DIR/perl5/5.8.5" \
109
- MNI_PERL5LIB="$MINC_LIB_DIR/perl5/5.8.5" \
110
- PATH="$FREESURFER_HOME/bin:$FREESURFER_HOME/tktools:$MINC_BIN_DIR:$PATH"
87
+ PATH="$FREESURFER_HOME/bin:$PATH"
111
88
112
89
# AFNI config
113
- ENV PATH="/opt/afni-latest:$PATH" \
114
- AFNI_IMSAVE_WARNINGS="NO" \
115
- AFNI_PLUGINPATH="/opt/afni-latest"
116
-
117
- # Workbench config
118
- ENV PATH="/opt/workbench/bin_linux64:$PATH"
90
+ ENV AFNI_IMSAVE_WARNINGS="NO"
119
91
120
92
# Create a shared $HOME directory
121
93
RUN useradd -m -s /bin/bash -G users neuro
122
94
WORKDIR /home/neuro
123
- ENV HOME="/home/neuro" \
124
- LD_LIBRARY_PATH="/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH"
95
+ ENV HOME="/home/neuro"
125
96
126
97
COPY --from=micromamba /bin/micromamba /bin/micromamba
127
98
COPY --from=micromamba /opt/conda/envs/nitransforms /opt/conda/envs/nitransforms
128
99
129
100
ENV MAMBA_ROOT_PREFIX="/opt/conda"
130
101
RUN micromamba shell init -s bash && \
131
102
echo "micromamba activate nitransforms" >> $HOME/.bashrc
132
- ENV PATH="/opt/conda/envs/nitransforms/bin:$PATH" \
133
- CPATH="/opt/conda/envs/nitransforms/include:$CPATH" \
134
- LD_LIBRARY_PATH="/opt/conda/envs/nitransforms/lib:$LD_LIBRARY_PATH"
103
+ ENV PATH="/opt/conda/envs/nitransforms/bin:$PATH"
135
104
136
105
# FSL environment
137
106
ENV LANG="C.UTF-8" \
@@ -145,22 +114,10 @@ ENV LANG="C.UTF-8" \
145
114
FSLREMOTECALL="" \
146
115
FSLGECUDAQ="cuda.q"
147
116
148
- # Unless otherwise specified each process should only use one thread - nipype
149
- # will handle parallelization
150
- ENV MKL_NUM_THREADS=1 \
151
- OMP_NUM_THREADS=1
152
-
153
117
# Install package
154
- # CRITICAL: Make sure python setup.py --version has been run at least once
155
- # outside the container, with access to the git history.
156
118
COPY --from=src /src/dist/*.whl .
157
119
RUN python -m pip install --no-cache-dir $( ls *.whl )[all]
158
120
159
-
160
- RUN find $HOME -type d -exec chmod go=u {} + && \
161
- find $HOME -type f -exec chmod go=u {} + && \
162
- rm -rf $HOME/.npm $HOME/.conda $HOME/.empty
163
-
164
121
RUN ldconfig
165
122
WORKDIR /tmp/
166
123
0 commit comments