Fmriprep-docker error at initiation

Summary of what happened:

Hi Colleagues:
I’m running into (what I’m hoping is) a simple error. I have confirmed I have docker wrapper running, increased the memory for processing, reinstalled to upgrade fmriprep (22.1.1), and confirmed PATH ( find ~/.local -name fmriprep-docker → /Users/thebeast/.local/bin/fmriprep-docker). However, I keep running into the following error after passing the following command line (note - I am indexing a VAR that carries the unique subject number):

Command used (and if a helper script was used, a link to the helper script or the command generated):

fmriprep-docker /Volumes/PhDVolume/From_PhD2TB/TLE_Project/fmriprep_tobe_processed \
/Volumes/PhDVolume/From_PhD2TB/TLE_Project/fmriprep_tobe_processed/derivatives participant \
--participant-label sub-${VAR[1]} --fs-license-file \
/Users/thebeast/Desktop/fmriprep_tobe_processed/license.txt --use-syn-sdc \
--output-spaces anat --stop-on-first-crash --fs-no-reconall

Version:

22.1.1

Environment (Docker, Singularity, custom installation):

Docker

Data formatted according to a validatable standard? Please provide the output of the validator:

Relevant log outputs (up to 20 lines):

The follow error is received:

RUNNING: docker run --rm -e DOCKER_VERSION_8395080871=20.10.21 -it -v /Users/thebeast/Desktop/fmriprep_tobe_processed/license.txt:/opt/freesurfer/license.txt:ro -v /Volumes/PhDVolume/From_PhD2TB/TLE_Project/fmriprep_tobe_processed:/data:ro -v /Volumes/PhDVolume/From_PhD2TB/TLE_Project/fmriprep_tobe_processed/derivatives:/out nipreps/fmriprep:22.1.1 /data /out participant --participant-label sub-R0067 --use-syn-sdc --stop-on-first-crash --fs-no-reconall --skip-bids-validation --output-spaces anat
--topup-max-vols input is no longer used and the flag will be removed in a future release.
Traceback (most recent call last):
  File "/opt/conda/bin/fmriprep", line 8, in <module>
    sys.exit(main())
  File "/opt/conda/lib/python3.9/site-packages/fmriprep/cli/run.py", line 42, in main
    parse_args()
  File "/opt/conda/lib/python3.9/site-packages/fmriprep/cli/parser.py", line 784, in parse_args
    config.from_dict({})
  File "/opt/conda/lib/python3.9/site-packages/fmriprep/config.py", line 673, in from_dict
    execution.load(settings, init=initialize('execution'), ignore=ignore)
  File "/opt/conda/lib/python3.9/site-packages/fmriprep/config.py", line 232, in load
    cls.init()
  File "/opt/conda/lib/python3.9/site-packages/fmriprep/config.py", line 476, in init
    cls._layout = BIDSLayout(
  File "/opt/conda/lib/python3.9/site-packages/bids/layout/layout.py", line 127, in __init__
    root, description = validate_root(root, validate)
  File "/opt/conda/lib/python3.9/site-packages/bids/layout/validation.py", line 73, in validate_root
    raise BIDSValidationError(
bids.exceptions.BIDSValidationError: 'dataset_description.json' is missing from project root. Every valid BIDS dataset must have this file.
Example contents of 'dataset_description.json': 
{"Name": "Example dataset", "BIDSVersion": "1.0.2"}
fMRIPrep: Please report errors to https://github.com/nipreps/fmriprep/issues

Screenshots / relevant information:

I’ve run fmriprep-docker before without issue (even with indexing to automate my workflow completely through all subjects). I don’t know what has changed or what I’m overlooking. Please, advise. Thank you for your assistance and support.

BR,
Stacy Hudgins

Hi @snh97,

I have relabeled your post as software support, added the appropriate template, and reorganized your post accordingly. You can see that the one item I could not find (and that seems very important here) is whether your data are BIDS valid. Please provide the output of BIDS validation, and also the output of tree /Volumes/PhDVolume/From_PhD2TB/TLE_Project/fmriprep_tobe_processed/.

Also, --fs-no-reconall is not recommended.

Best,
Steven

.
├── derivatives
├── sub-R0067
│   └── ses-1
│       ├── anat
│       │   ├── sub-R0067_ses-1_T1w.json
│       │   └── sub-R0067_ses-1_T1w.nii.gz
│       └── func
│           ├── sub-R0067_ses-1_task-rest_bold.json
│           └── sub-R0067_ses-1_task-rest_bold.nii.gz
├── sub-R0070
│   └── ses-1
│       ├── anat
│       │   ├── sub-R0070_ses-1_T1w.json
│       │   └── sub-R0070_ses-1_T1w.nii.gz
│       └── func
│           ├── sub-R0070_ses-1_task-rest_bold.json
│           └── sub-R0070_ses-1_task-rest_bold.nii.gz
├── sub-R0077
│   └── ses-1
│       ├── anat
│       │   ├── sub-R0077_ses-1_T1w.json
│       │   └── sub-R0077_ses-1_T1w.nii.gz
│       └── func
│           ├── sub-R0077_ses-1_task-rest_bold.json
│           └── sub-R0077_ses-1_task-rest_bold.nii.gz
├── sub-R0083
│   └── ses-1
│       ├── anat
│       │   ├── sub-R0083_ses-1_T1w.json
│       │   └── sub-R0083_ses-1_T1w.nii.gz
│       └── func
│           ├── sub-R0083_ses-1_task-rest_bold.json
│           └── sub-R0083_ses-1_task-rest_bold.nii.gz
├── sub-R0087
│   └── ses-1
│       ├── anat
│       │   ├── sub-R0087_ses-1_T1w.json
│       │   └── sub-R0087_ses-1_T1w.nii.gz
│       └── func
│           ├── sub-R0087_ses-1_task-rest_bold.json
│           └── sub-R0087_ses-1_task-rest_bold.nii.gz
├── sub-R0103
│   └── ses-1
│       ├── anat
│       │   ├── sub-R0103_ses-1_T1w.json
│       │   └── sub-R0103_ses-1_T1w.nii.gz
│       └── func
│           ├── sub-R0103_ses-1_task-rest_bold.json
│           └── sub-R0103_ses-1_task-rest_bold.nii.gz
├── sub-R0128
│   └── ses-1
│       ├── anat
│       │   ├── sub-R0128_ses-1_T1w.json
│       │   └── sub-R0128_ses-1_T1w.nii.gz
│       └── func
│           ├── sub-R0128_ses-1_task-rest_bold.json
│           └── sub-R0128_ses-1_task-rest_bold.nii.gz
├── sub-R0216
│   └── ses-1
│       ├── anat
│       │   ├── sub-R0216_ses-1_T1w.json
│       │   └── sub-R0216_ses-1_T1w.nii.gz
│       └── func
│           ├── sub-R0216_ses-1_task-rest_bold.json
│           └── sub-R0216_ses-1_task-rest_bold.nii.gz
├── sub-R0264
│   └── ses-1
│       ├── anat
│       │   ├── sub-R0264_ses-1_T1w.json
│       │   └── sub-R0264_ses-1_T1w.nii.gz
│       └── func
│           ├── sub-R0264_ses-1_task-rest_bold.json
│           └── sub-R0264_ses-1_task-rest_bold.nii.gz
├── sub-R0292
│   └── ses-1
│       ├── anat
│       │   ├── sub-R0292_ses-1_T1w.json
│       │   └── sub-R0292_ses-1_T1w.nii.gz
│       └── func
│           ├── sub-R0292_ses-1_task-rest_bold.json
│           └── sub-R0292_ses-1_task-rest_bold.nii.gz
├── sub-S0016
│   └── ses-1
│       ├── anat
│       │   ├── sub-S0016_ses-1_T1w.json
│       │   └── sub-S0016_ses-1_T1w.nii.gz
│       └── func
│           ├── sub-S0016_ses-1_task-rest_bold.json
│           └── sub-S0016_ses-1_task-rest_bold.nii.gz
├── sub-S0076
│   └── ses-1
│       ├── anat
│       │   ├── sub-S0076_ses-1_T1w.json
│       │   └── sub-S0076_ses-1_T1w.nii.gz
│       └── func
│           ├── sub-S0076_ses-1_task-rest_bold.json
│           └── sub-S0076_ses-1_task-rest_bold.nii.gz
├── sub-S0158
│   └── ses-1
│       ├── anat
│       │   ├── sub-S0158_ses-1_T1w.json
│       │   └── sub-S0158_ses-1_T1w.nii.gz
│       └── func
│           ├── sub-S0158_ses-1_task-rest_bold.json
│           └── sub-S0158_ses-1_task-rest_bold.nii.gz
├── sub-S0166
│   └── ses-1
│       ├── anat
│       │   ├── sub-S0166_ses-1_T1w.json
│       │   └── sub-S0166_ses-1_T1w.nii.gz
│       └── func
│           ├── sub-S0166_ses-1_task-rest_bold.json
│           └── sub-S0166_ses-1_task-rest_bold.nii.gz
├── sub-S0218
│   └── ses-1
│       ├── anat
│       │   ├── sub-S0218_ses-1_T1w.json
│       │   └── sub-S0218_ses-1_T1w.nii.gz
│       └── func
│           ├── sub-S0218_ses-1_task-rest_bold.json
│           └── sub-S0218_ses-1_task-rest_bold.nii.gz
├── sub-S0298
│   └── ses-1
│       ├── anat
│       │   ├── sub-S0298_ses-1_T1w.json
│       │   └── sub-S0298_ses-1_T1w.nii.gz
│       └── func
│           ├── sub-S0298_ses-1_task-rest_bold.json
│           └── sub-S0298_ses-1_task-rest_bold.nii.gz
├── sub-S0375
│   └── ses-1
│       ├── anat
│       │   ├── sub-S0375_ses-1_T1w.json
│       │   └── sub-S0375_ses-1_T1w.nii.gz
│       └── func
│           ├── sub-S0375_ses-1_task-rest_bold.json
│           └── sub-S0375_ses-1_task-rest_bold.nii.gz
├── sub-S0462
│   ├── anat
│   │   ├── sub-S0462_ses-1_T1w.json
│   │   └── sub-S0462_ses-1_T1w.nii.gz
│   └── func
│       ├── sub-S0462_ses-1_task-rest_bold.json
│       └── sub-S0462_ses-1_task-rest_bold.nii.gz
├── sub-S0627
│   └── ses-1
│       ├── anat
│       │   ├── sub-S0627_ses-1_T1w.json
│       │   └── sub-S0627_ses-1_T1w.nii.gz
│       └── func
│           ├── sub-S0627_ses-1_task-rest_bold.json
│           └── sub-S0627_ses-1_task-rest_bold.nii.gz
├── sub-S0651
│   └── ses-1
│       ├── anat
│       │   ├── sub-S0651_ses-1_T1w.json
│       │   └── sub-S0651_ses-1_T1w.nii.gz
│       └── func
│           ├── sub-S0651_ses-1_task-rest_bold.json
│           └── sub-S0651_ses-1_task-rest_bold.nii.gz
├── sub-S0662
│   ├── anat
│   │   ├── sub-S0662_ses-1_T1w.json
│   │   └── sub-S0662_ses-1_T1w.nii.gz
│   └── func
│       ├── sub-S0662_ses-1_task-rest_bold.json
│       └── sub-S0662_ses-1_task-rest_bold.nii.gz
├── sub-S0678
│   ├── anat
│   │   ├── sub-S0678_ses-1_T1w.json
│   │   └── sub-S0678_ses-1_T1w.nii.gz
│   └── func
│       ├── sub-S0678_ses-1_task-rest_bold.json
│       └── sub-S0678_ses-1_task-rest_bold.nii.gz
└── sub-S0699
    └── ses-1
        ├── anat
        │   ├── sub-S0699_ses-1_T1w.json
        │   └── sub-S0699_ses-1_T1w.nii.gz
        └── func
            ├── sub-S0699_ses-1_task-rest_bold.json
            └── sub-S0699_ses-1_task-rest_bold.nii.gz

91 directories, 92 files

the not recommended argument is to disable freesurfer

Folder structure follows BIDS format (as far as I can tell)

You should run your data through the BIDS validator. It doesn’t look like you have a dataset_description.json file, which is required for running BIDS apps.

Here is a template:

{
    "Name": "",
    "BIDSVersion": "1.2.1",
    "License": "",
    "Authors": [""
    ],
    "Acknowledgments": "",
    "HowToAcknowledge": "",
    "Funding": [
        ""
    ],
    "ReferencesAndLinks": [
        ""
    ],
    "DatasetDOI": ""
}

I ran the command line with the --skip-bids-validation argument and received the same error messages, but I will rerun with the dataset description. I hope it’s that simple. I will report back on findings.

In general it is not recommended to skip bids validation if you are unsure if your data are BIDS valid

In fact, it’s unsupported. The flag is there for people with specific environments that make it infeasible or costly to run validation at runtime, but our development and support time is scarce enough that invalid datasets are simply out of scope.

We should probably change or remove the “please report errors” text if skip_bids_validation is enabled.