在 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
问题在于这些命令生成的文件的所有者和组始终是root。
注意:此问题可能仅在 Linux 的 Docker 中出现。Mac 不会出现此问题。Windows 的情况未知。
方案一:Dockerfile
我们可以设置所有者和组Dockerfile。
官方文档说我们可以通过`.setowner`和`.setgroup`来实现USER postgres,但我们也可以用`.setgroup`来设置组:。
# Dockerfile
USER 1000:1000
但是,这种方法需要指定所有者和组 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}"
然后运行
UID=${UID} GID=${GID} docker-compose up
或者,将这些变量导出为环境变量,忽略它们。bash: UID: readonly variable
export UID=${UID}
export GID=${GID}
docker-compose up
环境
- Arch Linux
- Docker 1.12.3 linux/amd64
跑题了
我最喜欢的桌面Linux系统是Arch Linux。
pacmanArch 的软件包管理系统 始终提供任何软件包的最新版本。
使用 Docker 容器,任何主机都可以。
参考文献
- https://docs.docker.com/compose/reference/envvars/
- http://stackoverflow.com/questions/35093256/how-do-i-pass-an-argument-along-with-docker-compose-up/35107585#35107585
- https://stackoverflow.com/questions/10910096/what-is-the-command-to-get-groupid-of-a-group-name-in-mac-or-linux