Add environment variables for client OS/arch and client user UID/GID #11819
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When using Docker Compose for development setup, you often need to tweak the configuration to vary on Linux, macOS, and Windows. And some services you would like to run with the same UID/GID as your current client user.
Our developers use both Linux and Mac (and we have one on Windows as well).
Currently, we cannot vary our Docker Compose files to take the platform differences into account.
To work around that, we have tried to introduce shell scripts that need to be run before using Docker Compose so that it can add
.env
files orcompose.override.yaml
. And we tried using conventions like “only a minority uses Linux, and they are quite experienced, so if they export their UID we can use it if set and default to 501 otherwise”.Neither of those solutions are elegant or error proof, and they remove some intended flexibility of env files and override configs.
To help with that, I suggest introducing four new environment variables while parsing the configuration files:
COMPOSE_CLIENT_OS
: set to Go'sruntime.GOOS
COMPOSE_CLIENT_ARCH
: set to Go'sruntime.GOARCH
COMPOSE_CLIENT_UID
: set to the current users UIDCOMPOSE_CLIENT_GUID
: set to the current users GIDThis way, we can now have a Docker Compose setup like this:
compose.yaml
:compose.linux.yaml
:compose.darwin.yaml
:The change is rather simple. But I'll acknowledge my lack of familiarity with the docker Compose code base and therefore there could be unintended side effects, and maybe it fits better into other parts of the code base. Possibly, it also needs test coverage. And as usual, we can discuss one of the two hard problems: naming things (there might be better names for the environment variables).
At least, I hope this can be given some thought. I know it would make our setups more elegant.
Closes #11820.