testcontainers-node icon indicating copy to clipboard operation
testcontainers-node copied to clipboard

Setting `COMPOSE_COMPATIBILITY` flag changes behavior of separators and break Compose v2 integration

Open obelix74 opened this issue 1 year ago • 3 comments

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.2 on 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

obelix74 avatar Oct 02 '24 16:10 obelix74

A workaround is to set COMPOSE_COMPATIBILITY to false explicitly.

obelix74 avatar Oct 02 '24 17:10 obelix74

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_COMPATIBILITY is not supported (this will likely lead to issues for other TC languages as well)
  • When using Compose v2 integration, check the value for COMPOSE_COMPATIBILITY and with clear error if set to true?

kiview avatar Oct 04 '24 09:10 kiview

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.

obelix74 avatar Oct 04 '24 14:10 obelix74

Docker compose v1 became EOL in 2023, it doesn't make sense to add support for it now.

cristianrgreco avatar Jul 22 '25 08:07 cristianrgreco