If you're working in an existing repo or are running into errors, you may want to start from a clean environment, rebuilding the XNAT image, downloading the latest versions of the XNAT war and plugins, and resetting the database and archive contents. There are a number of places where data may be cached that you'll need to clear to ensure you're getting the latest versions of all dependencies and have cleared out all existing data stores.
For the first step, you should first shut down any running docker-compose configurations:
$ docker-compose down
You can use the following command to verify that nothing is left running:
$ docker ps --all
The --all flag includes containers that were launched but stopped for some reason. If you still have individual containers running, use the following command to kill them:
$ docker kill <name>
To remove locally build images, first list all of the images cached locally, then remove anything that was built locally:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
xnat-orthanc latest ed0f640665a3 35 minutes ago 265MB
xnat-db latest bd98a8897207 36 minutes ago 151MB
xnat-web latest 71780692637b 36 minutes ago 609MB
traefik latest 3d0acfd4b500 3 weeks ago 76.8MB
jodogne/orthanc-plugins latest f2854b307c42 5 weeks ago 208MB
postgres 12.2-alpine ecb176ff304a 2 months ago 151MB
tomcat 7-jre8-alpine d3deaf2d7b68 12 months ago 107MB
webcenter/activemq 5.14.3 ab2a33f6de2b 3 years ago 422MB
$ docker rmi xnat-web xnat-db xnat-orthanc
...
Pruning volumes means that Docker deletes any volumes that aren't referenced by a currently running container:
$ docker volume prune
Data is also stored in the various *-data folders created by docker-compose. You can remove these with something like this:
$ rm -rf *-data
Lastly, to make sure you're getting the latest "official" build of the XNAT war and various plugins, you can purge your local Maven and Gradle repository caches to force the dependency management functionality to download those artifacts from the XNAT Maven repository. You could just delete your entire Maven and Gradle repositories (minus some things like settings.xml and gradle.properties files), but then subsequent builds would take quite a while until cached items like plugins and wrappers have downloaded again. Instead you could just delete the folders containing the artifacts specified in your manifest.json file. For example, based on the manifest for XNAT-ML shown in the Docker-Compose Setup Instructions, you could run a script like this:
for FILE in $(find ~/.m2/repository ~/.gradle -name "xnat-web-ML-*.war" -o -name "batch-launch-ML-*.jar" -o -name "container-service-ML-*.jar" -o -name "dicom-query-retrieve-*.jar" -o -name "xnatx-clara-ML-*.jar" -o -name "xnatx-collection-*.jar" -o -name "ohif-viewer-*.jar"); do
rm -rf $(dirname ${FILE})
done
The file names are all based on the artifact ID and version, with a wildcard (*) to account for potential variances in the names from development or future release builds. Deleting the folder containing the file (accomplished by using dirname rather than the file name directly) ensures that the metadata associated with the jar or war file is also deleted.
At this point, your build and execution environment for the docker-compose project should be clean and your build should comprise only the latest canonical versions of the specified dependencies.