在 ms windows 中获取 userid 以进行 uid 和 gid 映射
Get userid in ms windows for uid and gid mapping
我有以下 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'
因此,通过 .env
文件提供 $USERID
和 $GROUPID
的值,每个开发人员都可以为其 GNU/Linux 本地用户构建自定义的、量身定制的图像运行 将图像导入 his/her 计算机。此外,he/she 可以通过以下 GNU/Linux 命令获取用户和组 ID:
id -u # For user id
id -g # For group id
但是在 Microsoft windows 上,我如何才能获得正确的用户和组 ID,以便将位于图像内部的用户 ID 和组 ID 正确映射到位于图像外部的用户 ID 和组 ID?
在 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)是 machine/domain.
上的唯一用户部分
如果您绝对需要 "a group",您可以解析 WHOAMI /GROUPS /FO LIST
的输出并查找 S-1-5-32-544
(管理员),而无需 仅拒绝 !如果存在,则用户是管理员,如果不存在,则可能只是用户 (S-1-5-32-545
)。你也可以看看 how Samba maps groups.
我有以下 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'
因此,通过 .env
文件提供 $USERID
和 $GROUPID
的值,每个开发人员都可以为其 GNU/Linux 本地用户构建自定义的、量身定制的图像运行 将图像导入 his/her 计算机。此外,he/she 可以通过以下 GNU/Linux 命令获取用户和组 ID:
id -u # For user id
id -g # For group id
但是在 Microsoft windows 上,我如何才能获得正确的用户和组 ID,以便将位于图像内部的用户 ID 和组 ID 正确映射到位于图像外部的用户 ID 和组 ID?
在 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)是 machine/domain.
上的唯一用户部分如果您绝对需要 "a group",您可以解析 WHOAMI /GROUPS /FO LIST
的输出并查找 S-1-5-32-544
(管理员),而无需 仅拒绝 !如果存在,则用户是管理员,如果不存在,则可能只是用户 (S-1-5-32-545
)。你也可以看看 how Samba maps groups.