【问题标题】:How to set uid and gid in Docker Compose?如何在 Docker Compose 中设置 uid 和 gid?
【发布时间】:2019-11-12 15:30:12
【问题描述】:

我可以像这样执行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 命令替换,但它不能。

有没有办法做到这一点?

【问题讨论】:

  • 更重要的是,Docker Compose 不是外壳,所以它不做command substitution
  • 更新:自动处理 UIDGID 变量的功能将不会添加到撰写中。推理被明确地解释为here 声明性语言中的一个潜在安全漏洞。以前,这是open but now closed issue

标签: bash shell docker docker-compose


【解决方案1】:

试试this

所以,你需要输入:

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

在您的 docker compose 中并提供 UID 和 GID 作为 docker-compose 参数

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

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

【讨论】:

  • 谢谢。显然,这是目前唯一的好答案。您将获得答案。
  • 为什么需要明确地将 UID 和 GID 设置为它们已有的相同值?为什么“docker-compose up”还不够?编辑:找到答案;它们是 shell 变量而不是环境变量。 github.com/docker/compose/issues/4725
  • 也许更有效:UID="$(id -u)" GID="$(id -g)" docker-compose up 或者,UID_GID="$(id -u):$(id -g)" docker-compose up(在组合集中 user: "${UID_GID}" ...
  • 对我来说,当我使用不带引号的 docker-compose 文件时,它起作用了:user: ${UID_GID}。我正在使用 docker-compose version: '3.8'
  • $ UID=xxx cmd 对于所有的 shell 来说并不是一个好主意,因为(例如)在 bash UID 中是一个只读变量并且已经存在,但没有导出。 @ingyhere 的评论是正确的选择。
【解决方案2】:

这个也可以

在您的 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 中以实现持久性。源代码将帮助 shell 按需识别 .bash_profile 的变化

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 2016-06-17
    • 1970-01-01
    • 2015-11-30
    相关资源
    最近更新 更多