如何在Docker Compose中设置uid和gid?

uurity8g  于 2023-04-05  发布在  Docker
关注(0)|答案(3)|浏览(421)

我可以像这样执行docker run命令…

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

但是,在Docker Compose中,当我写出以下内容时...

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

...它不工作。
我知道我要求docker-compose up执行子shell命令替换,它不能。
有什么办法可以做到吗?
如果我添加(我的用户有1000个ID)

php:
    user: 1000:1000
    build:
      context: .
      target: app_php

开始我得到

Cannot create cache directory /.composer/cache/repo/flex/, or directory is not writable. Proceeding without cache. See also cache-read-only config if your filesystem is read-only.

我删除容器和重建,但...

Dockerfile:102
--------------------
 101 |     
 102 | >>> RUN set -eux; \
 103 | >>>      mkdir -p var/cache var/log; \
 104 | >>>     if [ -f composer.json ]; then \
 105 | >>>              composer dump-autoload --classmap-authoritative --no-dev; \
 106 | >>>              composer dump-env prod; \
 107 | >>>              composer run-script --no-dev post-install-cmd; \
 108 | >>>              chmod +x bin/console; sync; \
 109 | >>>     fi
tkclm6bt

tkclm6bt1#

尝试this
因此,您需要输入:

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

并提供UID和GID作为docker-compose参数

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

(or将UID和GID定义为环境变量)。

inn6fuwd

inn6fuwd2#

这也可以做到

在您的docker-composer.yml

user: $DOCKER_USER

命令行中

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

source ~/.bash_profile

docker-compose up

创建了一个DOCKER_USER变量并将其添加到bash_profile中以实现持久性。

6jygbczu

6jygbczu3#

在docker build image上添加以下命令行参数:

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

在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}

相关问题