Setting `COMPOSE_COMPATIBILITY` flag changes behavior of separators and break Compose v2 integration
Expected Behaviour
The separators for docker container names when using docker compose should be uniform, either _ or -.
Actual Behaviour
Currently, testcontainers-node has no way to set --compatibility on the docker compose client. I have two environments, one in which docker-compose is installed and in one where docker-compose is not installed. In the environment where docker-compose is installed, an env variable COMPOSE_COMPATIBILITY is set. This changes the separators from - to _ for docker containers.
With Docker version 2.29.2-desktop.2, there is no way to access docker-compose (it seems to have been removed) and the only separator supported is -.
Testcontainer Logs Attached two sets of logs.WithoutComposeComptability.txt WithComposeCompatibility.txt
Steps to Reproduce
@kiview was able to reproduce this with COMPOSE_COMPATIBILITY turned on.
Environment Information
- Operating System: Mac desktop and Linux
- Docker Version:
2.29.2-desktop.2on Mac. docker-compose version 1.28.2, build 67630359 and Docker Compose version v2.18.1 in Linux - Node version: 20.17.0
- Testcontainers version: 10.13.1
A workaround is to set COMPOSE_COMPATIBILITY to false explicitly.
Thanks @obelix74 for getting involved in the debugging work in Slack.
I don't think we will add support for COMPOSE_COMPATIBILITY in any of the TC languages, but I wonder how we can provide a better DX around this situation still.
Some ideas:
- Document that
COMPOSE_COMPATIBILITYis not supported (this will likely lead to issues for other TC languages as well) - When using Compose v2 integration, check the value for
COMPOSE_COMPATIBILITYand with clear error if set totrue?
One way to solve it might be to add an option that allows clients to enable --compatibility. The Java client seems to have .withOption("--compatibility"). This will force the usage of _ everywhere until docker compose version 1 is purged completely.
Docker compose v1 became EOL in 2023, it doesn't make sense to add support for it now.