【发布时间】:2019-07-01 22:47:15
【问题描述】:
如何运行docker run 和docker-compose up/run 命令,以便docker 内的进程由与我的本地用户具有相同uuid 的用户运行?
我需要这样做,以便“内部 docker”进程生成的任何文件都具有我的本地用户的所有权权限。
复制:
使用alpine:3.9 容器,挂载到要写入的文件的卷中并创建文件。假设我当前的用户名是user。
mkdir output_dir #Create an output directory
docker run -it --rm --volume "/path/to/output_dir:/tmp" alpine:3.9 touch /tmp/file.txt
ls -la output_dir/file.txt
会给出输出:
-rw-r--r-- 1 root root 0 Feb 7 19:51 /path/to/output_dir/file.txt
这意味着我需要sudo chown user:user /path/to/output_dir/file.txt 才能以当前用户身份访问我自己的文件系统。
如果没有这个额外的步骤,我该怎么做?
想到的想法:
添加一个 Docker Entrypoint,它将在容器内创建一个与我的本地用户具有相同 uuid 的用户,并以该用户身份执行任何代码。
docker-entrypoint.sh
#!/bin/sh
TEMP_UID="${TEMP_UID:-1000}"
set -ux
useradd -s /bin/false --no-create-home -u ${TEMP_UID} temp
#su-exec is an executable which makes it easy to run a process as a specific user.
exec su-exec temp $@
问题是我必须在每个docker run 命令中注入TEMP_UID=<user_id> 作为环境变量,或者为每个docker-compose up/run 命令包含在我的docker-compose.yml 文件中。如果Docker 有一个内部变量来跟踪运行它的用户的uuid,我会使用它。但我似乎找不到这样的内部变量。
任何帮助将不胜感激!
【问题讨论】:
-
这里的
fix-perms脚本可能会让您感兴趣:github.com/sudo-bmitch/docker-base -
@BMitch,非常有趣!我会试试这个,让你知道结果如何!
标签: docker dockerfile file-permissions user-permissions