How to set uid and gid in Docker Compose?

I can execute a docker run command as such ...

docker run --rm --user $(id -u):$(id -g) -e MYDATA=/some/path/to/data -e USER=$USER -p 8883-8887:8883-8887 ... 

However, in Docker Compose, when I write out the following ...

version: '3.7' services: container_name: some-server image: some:img user: $(id -u):$(id -g) ... 

... it does not work.

I understand I am asking docker-compose up to perform sub shell command substitution, and it cannot.

Is there any way to do this?

2

3 Answers

Try this

So, you need to put:

user: "${UID}:${GID}" 

in your docker compose and provide UID and GID as docker-compose parameter

UID=${UID} GID=${GID} docker-compose up 

(or define UID and GID as environment variables).

9

This can be done as well

In your docker-composer.yml

user: $DOCKER_USER 

In the command line

echo 'export DOCKER_USER="$(id -u):$(id -g)"' >> ~/.bash_profile source ~/.bash_profile docker-compose up 

Created a DOCKER_USER variable and added it in the bash_profile for persistency. The source will help the shell to recognize changes of .bash_profile on demand

add following command line arguments on docker build image:

docker build --build-arg UID="$(id -u)" --build-arg GID="$(id -g)" --build-arg UNAME="$(whoami)" . -t tagname -f docker.recipe 

append following lines at the begin of the docker recipe:

FROM ubuntu:18.04 AS yoursystem ARG UID ARG GID ARG UNAME RUN groupadd -g ${GID} -o ${UNAME} RUN useradd -m -u ${UID} -g ${GID} -o -s /bin/bash ${UNAME} 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like