我有以下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?
答案 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。