docker运行 – 用户和 – 组添加参数之间的区别

docker run参数有什么区别:

  -u, --user="" Sets the username or UID used and optionally the groupname or GID for the specified command. The followings examples are all valid: --user [user | user:group | uid | uid:gid | user:gid | uid:group ] Without this argument the command will be run as root in the container. 

  --group-add=[] Add additional groups to run as 

docker run --user=demo_user <image_name> <command>以给定的命令作为demo_user运行一个容器 在这里输入图像说明

docker run --user=demo_user:group1 <image_name> <command>使用给定的命令作为demo_user运行一个容器,其主组被设置为group1 在这里输入图像说明

docker run --user=demo_user:group1 --group-add group2 <image_name> <command>使用给定的命令作为demo_user运行一个容器,其主要组被设置为group1group2作为用户的辅助组 在这里输入图像说明

注意:用于这些选项的用户和组必须已经在我们创build容器的图像中创build。 如果单独指定--group-add选项而没有指定--user ,并且图像没有声明任何用户(用户应该已经创build了,但是没有通过创build镜像的Dockerfile中的USER指令声明),组的修改发生在root容器中的用户。

如果单独指定--group-add选项而不指定--user ,并且图像确实有用户声明(通过Dockerfile中的USER指令创build映像),则组中的声明用户将进行组修改。

当您创buildDocker镜像时,您也可以在其中创build用户和组。 这些选项允许您以特定用户( -u )和其他组( --group-add )连接。

换句话说,当你在一个Docker容器中执行一个进程时,你可以像提供的用户一样,在它的组中定义(在系统中定义)。 您可以通过使用--group-add标志来告诉系统当前用户具有添加组,用于进程的生命周期。

看看这里的文档: https : //docs.docker.com/engine/reference/run/#/additional-groups

 $ docker run --rm --group-add audio --group-add nogroup --group-add 777 busybox id uid=0(root) gid=0(root) groups=10(wheel),29(audio),99(nogroup),777