docker工人:启动容器时设置运行用户

我使用官方的golang docker镜像来编译我的go程序,并将生成的可执行文件放在映射到我的主机目录的卷上。

问题是由docker生成的文件属于root:root,这非常烦人,因为我不想通过sudo运行我的脚本。

我search解决scheme,使docker容器作为非根运行,但我发现的方法需要更改Dockerfile并将用户添加到图像,例如

http://gbraad.nl/blog/non-root-user-inside-a-docker-container.html

有没有一种方法可以让Docker容器作为CURRENT用户在主机上运行,​​也就是说,用户A运行这个镜像会生成一个文件属于A:A,而用户B生成的文件属于B:B,而A和B都是在主机上定义的用户(即卷所在的位置),而不需要通过Dockerfile将A和B添加到映像中?

我由base alphine-golang加上git工具制作的)在我的笔记本电脑上运行-u arg,但是如果我在debian虚拟机上运行它,它会告诉我没有用户存在uid 1001

理想情况下,您将使用正确的预期ID制作自己的图像(基于现有的图像):

 RUN useradd -r -u 1001 -g appuser appuser USER appuser 

请参阅Marc Campbell的 “ 了解Docker容器中的uid和gid如何工作 ”:

UID / GID与Docker


OP增加:

我明白原因,因为这正是我试图避免的:添加用户到图像中。
如果我的问题没有解决,我会尝试直接修改容器。

实际上,还有另一种select,它允许你修改图像, 添加用户: userns或用户重映射 ( 自 docker 1.10 )。 但是,正如我在这里提到的 ,你需要docker 17.06来避免一些bug。