运行时默认
docker run -it [myimage]
要么
docker attach [mycontainer]
您以root用户身份连接到终端,但是我想以其他用户身份连接。这可能吗?
运行时默认
docker run -it [myimage]
要么
docker attach [mycontainer]
您以root用户身份连接到终端,但是我想以其他用户身份连接。这可能吗?
su user_name
Answers:
对于docker run
:
--user <user>
在启动Docker容器时,只需添加选项即可更改为其他用户。
docker run -it --user nobody busybox
对于docker attach
或docker exec
:
由于该命令用于附加/执行到现有进程中,因此它直接在此使用当前用户。
docker run -it busybox # CTRL-P/Q to quit
docker attach <container id> # then you have root user
/ # id
uid=0(root) gid=0(root) groups=10(wheel)
docker run -it --user nobody busybox # CTRL-P/Q to quit
docker attach <container id>
/ $ id
uid=99(nobody) gid=99(nogroup)
如果您确实想附加到想要拥有的用户,那么
run --user <user>
或在您的Dockerfile
使用中提及它USER
您可以使用以下命令在运行的docker容器中运行shell:
docker exec -it --user root <container id> /bin/bash
--user
我想必须以root身份运行命令时,可以省略该选项。
USER
,请参阅docs.docker.com/engine/reference/builder/#user
您可以USER
在Dockerfile中指定。所有后续操作都将使用该帐户执行。您可以USER
在CMD
或之前指定一行,或者ENTRYPOINT
如果您只想在启动容器时使用该用户(而不在构建映像时使用)。从结果图像启动容器时,将以指定用户的身份附加。
我能够使其工作的唯一方法是:
docker run -it -e USER=$USER -v /etc/passwd:/etc/passwd -v `pwd`:/siem mono bash
su - magnus
因此,我必须同时指定$ USER环境变量以及/ etc / passwd文件。这样,我可以在/ siem文件夹中进行编译,并保留该文件的所有权而不是root。
我的解决方案:
#!/bin/bash
user_cmds="$@"
GID=$(id -g $USER)
UID=$(id -u $USER)
RUN_SCRIPT=$(mktemp -p $(pwd))
(
cat << EOF
addgroup --gid $GID $USER
useradd --no-create-home --home /cmd --gid $GID --uid $UID $USER
cd /cmd
runuser -l $USER -c "${user_cmds}"
EOF
) > $RUN_SCRIPT
trap "rm -rf $RUN_SCRIPT" EXIT
docker run -v $(pwd):/cmd --rm my-docker-image "bash /cmd/$(basename ${RUN_SCRIPT})"
这允许用户使用提供的工具运行任意命令my-docker-image
。注意如何将用户的当前工作目录批量安装到 /cmd
容器内部。
我正在使用此工作流,以允许我的开发团队为我维护其bsp的arm64目标交叉编译C / C ++代码(其中my-docker-image
包含交叉编译器,sysroot,make,cmake等)。这样,用户可以简单地执行以下操作:
cd /path/to/target_software
cross_compile.sh "mkdir build; cd build; cmake ../; make"
cross_compile.sh
上面显示的脚本在哪里。该addgroup/useradd
机制允许用户拥有由构建创建的任何文件/目录的所有权。
虽然这对我们有用。似乎有点不客气。我愿意接受其他实现方式...
作为2020年以来的更新答案。--user,-u选项是Username或UID(格式:<name | uid> [:<group | gid>])。
然后,它像这样对我有用
docker exec -it -u root:root container /bin/bash
参考:https : //docs.docker.com/engine/reference/commandline/exec/
docker run --user user_name