Yep, so like Helder mentions, you could do this sort of thing. It's really important that the different dagger engine containers have different names and different volume names like I have below, otherwise the other engine containers won't start due to conflicts like these.
From docker run with dup name:
docker: Error response from daemon: Conflict. The container name "/dagger-engine-097" is already in use...
Dup volume name, From docker logs <failed container id>;
buildkitd: could not lock /var/lib/dagger/buildkitd.lock, another instance running?
Download CLIs:
mkdir -p /tmp/env095 && cd /tmp/env095 && curl -L https://dl.dagger.io/dagger/install.sh | DAGGER_VERSION="0.9.5" sh;
mkdir -p /tmp/env096 && cd /tmp/env096 && curl -L https://dl.dagger.io/dagger/install.sh | DAGGER_VERSION="0.9.6" sh;
mkdir -p /tmp/env097 && cd /tmp/env097 && curl -L https://dl.dagger.io/dagger/install.sh | DAGGER_VERSION="0.9.7" sh;
/tmp/env095/bin/dagger version
/tmp/env096/bin/dagger version
/tmp/env097/bin/dagger version
# start engine
docker run \
--name dagger-engine-095 \
--privileged \
--stop-signal SIGTERM \
-d \
-v dagger-engine-095:/var/lib/dagger \
registry.dagger.io/engine:v0.9.5 > /tmp/env095/id
# using #project-zenith func
_EXPERIMENTAL_DAGGER_RUNNER_HOST=docker-container://dagger-engine-095 /tmp/env095/bin/dagger call -m github.com/shykes/daggerverse/hello shout
# if you need to stop engine
# docker stop `cat /tmp/env095/id`