在MS Windows中获取用户ID以进行uid和gid映射

时间:2019-05-24 10:33:27

标签: windows docker docker-compose uid

我有以下Dockerfile

FROM php:7-cli-alpine3.9

ARG USERID=1000
ARG GROUPID=1000

RUN apk add --no-cache --update bash bash-completion bash-doc &&\
    addgroup -g ${GROUPID} developer &&\
    mkdir -p /home/developer/code &&\
    adduser -D -u ${USERID} -G developer -h /home/developer -s /bin/bash developer &&\
    chown developer:developer -R /home/developer/code &&\
    php -r "copy('https://getcomposer.org/installer', '/tmp/composer-setup.php');"&&\
    php -r "if (hash_file('sha384', '/tmp/composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" &&\
    php /tmp/composer-setup.php --install-dir=bin --filename=composer &&\
    php -r "unlink('composer-setup.php');" &&\
    chmod +x /bin/composer

VOLUME /home/developer/code
WORKDIR /home/developer/code
USER developer

ENTRYPOINT /bin/bash

我可以通过以下docker-compose.yml来构建它:

version: '3'
services:
  php:
    build:
      context: .
      dockerfile: ./Dockerfile
      args:
        USERID: $USERID
        GROUPID: $GROUPID
    image: 'pcmagas/rover_php'
    stdin_open: true
    tty: true
    volumes:
     - './:/home/developer/code'

因此,每个开发人员通过通过$USERID文件提供$GROUPID.env的值,可以为其运行该映像的GNU / Linux本地用户构建定制的定制映像。他/她的计算机。另外,他/她还可以通过以下GNU / Linux命令获取用户和组ID:

id -u # For user id
id -g # For group id

但是在Microsoft Windows上,我如何获取正确的用户名和组ID,以便正确映射位于图像内部的用户ID和组ID与位于外部的用户ID和组ID?

1 个答案:

答案 0 :(得分:0)

在Windows上,用户属于多个组,而不是特定组。从技术上讲,用户令牌具有TokenPrimaryGroup属性,该属性可能是为了提供某种UNIX兼容性而存在的,但是我不认为Windows附带了打印此SID的工具。

您可以在Vista +上通过whoami.exe获取用户SID(SecurityID):

批处理文件:

for /F "tokens=1,2 delims=: " %%A in ('WhoAmI /USER /FO LIST') do @if /I "%%~A" == "SID" echo %%B

交互式cmd.exe:

for /F "tokens=1,2 delims=: " %A in ('WhoAmI /USER /FO LIST') do @if /I "%~A" == "SID" echo %B

用户SID标识特定计算机或域上的用户。 SID的最后一部分(RID)是该计算机/域上唯一的用户部分。

如果您绝对需要“一组”,则可以解析WHOAMI /GROUPS /FO LIST的输出并寻找S-1-5-32-544(管理员)而无需仅拒绝!如果存在该用户,则该用户是管理员,否则可能只是用户(S-1-5-32-545)。您还可以查看how Samba maps groups