发布于 2026-01-06 1 阅读
0

在 Docker 中指定用户和组 方案 1:Dockerfile 方案 2:命令参数 方案 3:在 docker-compose.yml 中指定 环境 无关主题 参考资料

在 Docker 中指定用户和组

方案一:Dockerfile

解决方案 2:命令参数

方案 3:在 docker-compose.yml 文件中指定

环境

跑题了

参考文献

如果我们使用 Docker 作为开发环境,我们将使用docker命令来生成文件。

例如

docker run --rm ruby:2.4 bundle exec rails g ...
docker-compose run --rm web composer install
Enter fullscreen mode Exit fullscreen mode

问题在于这些命令生成的文件的所有者和组始终是root

注意:此问题可能仅在 Linux 的 Docker 中出现。Mac 不会出现此问题。Windows 的情况未知。

方案一:Dockerfile

我们可以设置所有者和组Dockerfile
官方文档说我们可以通过`.setowner`和`.setgroup`来实现USER postgres,但我们也可以用`.setgroup`来设置组:

# Dockerfile

USER 1000:1000
Enter fullscreen mode Exit fullscreen mode

但是,这种方法需要指定所有者和组 ID。
我找到了更灵活的解决方案。

解决方案 2:命令参数

docker run -u 1000:1000 debian bash

这样,我们就可以使用 shell 变量来设置用户和组,例如$UID.
或者getent group staff | cut -d: -f3.

方案 3:在 docker-compose.yml 文件中指定

我一直在找这个。

原理与方案 2 相同,因此以下配置可以正常工作:

# docker-compose.yml

web:
  image: ruby:2.4
  user: "${UID}:${GID}"
Enter fullscreen mode Exit fullscreen mode

然后运行

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

或者,将这些变量导出为环境变量,忽略它们。bash: UID: readonly variable

export UID=${UID}
export GID=${GID}
docker-compose up
Enter fullscreen mode Exit fullscreen mode

环境

  • Arch Linux
  • Docker 1.12.3 linux/amd64

跑题了

我最喜欢的桌面Linux系统是Arch Linux。

pacmanArch 的软件包管理系统 始终提供任何软件包的最新版本。

使用 Docker 容器,任何主机都可以。

参考文献

文章来源:https://dev.to/acro5piano/specifying-user-and-group-in-docker-i2e