not an answer but this reminds me of the discussion here; Working offline with singularity
Its pretty much the same issue; the need to be able to parameterize the container locations so that you can more easily change the container configs for workflows and tools without having to hard-code everything into each CWL. One of the solutions they had for this in Nextflow was the use of “profiles” that could define all the settings for each process and you could select different profiles at run time. Essentially allowing a stronger separation between the task definition (the tool you are running and its inputs & outputs) and the task execution criteria (containers, environment, CPU & mem resources, etc).
Not sure if anything similar exists in CWL yet? As it is, I have to use a Perl one-liner every single time I version bump a container and need to propagate the change to every CWL.