This repository serves as a streamlined, direct approach to building or launching containerized versions of AFNI (Analysis of Functional NeuroImages). It aims to reduce dependency conflicts and installation overhead, making it easier to deploy AFNI in a Docker on different operating systems (various Linux distributions and macOS) and on different CPU architectures (Intel/x86, Apple Silicon, ARM). Windows is not yet supported.
afni_docker_universal/
Contains the foundationalDockerfileconfiguration and setup scripts needed to assemble a universal AFNI container environment.launch_afni_docker.sh
A dedicated shell script wrapper engineered to automate volume mounting, user permission management, and GUI/X11 rendering parameters.
- Installation on macOS
- Installation on Linux
- Launching the AFNI Docker
- Using the AFNI Docker
- macOS Notes
- Linux Notes
These items should only need to be done once to setup on the computer for using the AFNI docker.
-
Docker: The system used for running containers.
Download and install from the Docker website. Note your Mac's architecture (Silicon or Intel).If you want to use Homebrew, you can install Docker with the following command:
brew install docker -
XQuartz: Required for interactive elements like the AFNI and SUMA GUIs.
Download and install XQuartz.Or use Homebrew:
brew install --cask xquartz -
Launcher script: The all-in-one executable script that runs the AFNI Docker.
Download the script here: launch_afni_docker.sh.Or download to your home directory from the command line:
cd curl -O https://github.com/afni/docker_v1/blob/main/launch_afni_docker.sh
These items should only need to be done once to setup on the computer for using the AFNI docker.
-
Docker: The system used for running containers.
Follow instructions for your Linux flavor (Ubuntu, Fedora, RedHat, etc.) on the Docker website. -
Launcher script: The all-in-one executable script that runs the AFNI Docker.
Download the script here: launch_afni_docker.sh.Or download to your home directory from the command line:
cd curl -O https://github.com/afni/docker_v1/blob/main/launch_afni_docker.sh
NB: If you are using Windows Subsystem Linux (WSL), you will also need to install an X-server, like vcXsrv.
To launch your current available version of AFNI via docker, run:
bash launch_afni_docker.sh
On first run, the script will check for the latest version of AFNI and download it if necessary. If you already have a local AFNI Docker, it will be used.
To force the latest version of AFNI, run:
bash launch_afni_docker.sh -latest
See Using the AFNI Docker, below, about navigating file structure, exiting the container, and more.
-
Executing
bash launch_afni_docker.shwith no arguments will configure and launch the afni docker.- See
bash launch_afni_docker.sh -helpfor more info.
- See
-
The afni docker will be launched with the current user's home directory mounted to /home/external in the docker container. This allows you to access your files from within the docker container. The Docker program may give you a warning about this, but it is safe to ignore.
-
To exit the docker container, type 'exit' or 'Ctrl+d' TWICE in the terminal. Once to get out user shell and once to exit the docker container. If you only type 'exit' or 'Ctrl+d' ONCE, you will be returned to the root shell in the docker container.
There are some settings on XQuartz that may prevent the AFNI/SUMA GUI from
displaying. The launch_afni_docker.sh script will attempt to set the correct
settings. There will be prompt to allow the script to set these settings. You
can choose to allow or deny this. The warning messages will include
instructions on how to manually set these settings if you choose to deny the
script permission to set them.
To summarize the notes below, the following commands will set the XQuartz security settings and enable indirect GLX rendering:
defaults write org.xquartz.X11.plist nolisten_tcp -bool false
defaults write org.xquartz.X11 no_auth -boolean true
defaults write org.xquartz.X11 enable_iglx -bool trueThen restart XQuartz and the terminal for the changes to take effect.
To restore the default settings, run the following commands:
defaults write org.xquartz.X11.plist nolisten_tcp -bool true
defaults write org.xquartz.X11 no_auth -boolean false
defaults write org.xquartz.X11 enable_iglx -bool falseThen restart XQuartz and the terminal for the changes to take effect.
There are two security settings that need to be set correctly for the AFNI/SUMA GUI to display.
- The first setting is
Allow connections from network clients. - The second setting is
Authenticate connections.
- Open XQuartz and go to
XQuartz>Preferences>Security. - Ensure that the option
Allow connections from network clientsis CHECKED. - Ensure that the option
Authenticate connectionsis UNCHECKED. - Restart XQuartz for the changes to take effect.
(Reverse the above steps if you want to restore the default settings).
Open a terminal and run the following commands to allow all connections from unauthenticated network clients:
defaults write org.xquartz.X11.plist nolisten_tcp -bool true
defaults write org.xquartz.X11 no_auth -boolean falseThen restart XQuartz and the terminal for the changes to take effect.
To restore the default settings, run the following commands:
defaults write org.xquartz.X11.plist nolisten_tcp -bool false
defaults write org.xquartz.X11 no_auth -boolean trueThen restart XQuartz and the terminal for the changes to take effect.
To enable indirect GLX rendering, run the following command in a terminal:
defaults write org.xquartz.X11 enable_iglx -bool trueThen restart XQuartz and the terminal for the changes to take effect.
To restore the default settings, run the following commands:
defaults write org.xquartz.X11 enable_iglx -bool falseThen restart XQuartz and the terminal for the changes to take effect.
-
On Linux, the user needs to be in the
dockergroup to run this script. If you are not in the docker group, the script will exit with an error. You need administrative privileges to create the docker group and add yourself to the group.You can create the docker group with the following command:
sudo groupadd docker.You can add yourself to the docker group with the following command:
sudo usermod -aG docker $USER.You need to restart your computer or log out and log back in for the group changes to take effect. Running the script with
sudowill not fix this issue. -
On some Linux variants, the Docker Desktop may block X11 forwarding. If this happens, you can try the
-displayoption to set a different display environment variable. However, this may not work and the using Docker engine instead of the the Docker Desktop may be the only way to fix this issue. Please see the Docker documentation for more information. -
launch_afni_docker.shwill setxhost +SI:localuser:$USERto allow the docker container to connect to the X11 server. If you want to undo this, you can runxhost -SI:localuser:$USERafter exiting the docker container.
- The docker container will be launched with the current user's UID and GID. This allows you to create and access files in your home directory from within the docker container without permission issues.
- By default the
launch_afni_docker.shwill pull the latest version of the AFNI docker image from Docker Hub on first run or with the-latestoption. Currently the Docker Hub repository is owned by Justin Rajendra (DiscoRaj) from the AFNI Group (SSCC at the NIH). You can find the Docker Hub repository here.
If you want to construct the image directly using the localized source files under the afni_docker_universal directory, execute:
git clone https://github.com/afni/docker_v1.git
cd docker_v1/afni_docker_universal
docker build -t afni_universal .docker run -ti --rm \
-u root \
-v "${HOME}:/home/external" \
-v /tmp/.X11-unix:/tmp/.X11-unix \
--env DISPLAY="host.docker.internal:0" \
--env USERID="`id -u`" \
--env GRPID="`id -g`" \
--env GRPNAME="`id -gn`" \
--env USERNAME="`id -u -n`" \
afni_universaldocker run -ti --rm \
-u root \
-v "${HOME}:/home/external" \
-v /tmp/.X11-unix:/tmp/.X11-unix \
--env DISPLAY="${DISPLAY}" \
--env USERID="`id -u`" \
--env GRPID="`id -g`" \
--env GRPNAME="`id -gn`" \
--env USERNAME="`id -u -n`" \
afni_universal