Permissions Docker从主机复制容器中的UID/GID

Permissions Docker从主机复制容器中的UID/GID,permissions,docker,Permissions,Docker,在创建Docker容器时,我一直遇到UID/GID没有反映在容器中的问题(我意识到这是出于设计)。我要寻找的是一种保持主机权限合理和/或从Docker容器中的主机用户/组帐户复制UID/GID的方法。例如: 宿主- woot4moo:x:504:504:woot4moo:/home/woot4moo:/bin/bash 我希望在Docker容器中有相同的行为。也就是说,这是做这类事情的正确方式吗?我相信我可以简单地跑: useradd -u 504 -g 504 woot4moo 作为Dock

在创建Docker容器时,我一直遇到UID/GID没有反映在容器中的问题(我意识到这是出于设计)。我要寻找的是一种保持主机权限合理和/或从Docker容器中的主机用户/组帐户复制UID/GID的方法。例如:

宿主-

woot4moo:x:504:504:woot4moo:/home/woot4moo:/bin/bash

我希望在Docker容器中有相同的行为。也就是说,这是做这类事情的正确方式吗?我相信我可以简单地跑:

useradd -u 504 -g 504 woot4moo

作为Dockerfile的一部分,但我不确定这是否有效。

您不希望将其作为映像生成过程的一部分(在Dockerfile中)运行,因为运行容器的主机通常不是您构建映像的主机

解决此问题的一种方法是通过环境变量传入UID/GID信息:

docker run -e APP_UID=100 -e APP_GID=100 ...
然后在运行
CMD
之前,创建一个包含以下内容的
ENTRYPOINT
脚本:

useradd -c 'container user' -u $APP_UID -g $APP_GID appuser
chown -R $APP_UID:$APP_GID /app/data

我也有类似的问题,通常在每个图像中都包含entrypoint脚本,正如前面提到的(用于交互式终端程序)。然而,我在多个DockerFile中不断重复相同的步骤。但是,在我使用Jenkins Pipeline中的“docker.inside”自动处理用户id之后,我决定基于docker py构建一个Python3包,以类似的方式(希望如此)实现这一点(我发现一些扩展功能很有用):


我意识到这个职位相当老了;也许它对有同样问题的人仍然有帮助……

~3年前,它是针对一个相对偏僻的用例。我不确定这些天它是否仍然有意义。当群组应用程序不存在时,它就不起作用了。可以使用
groupadd--force--gid${APP_gid}appuser