我知道可以使用--userDocker的选项以特定用户身份运行容器,但在我的情况下,我的 Docker 映像中有一个用户,我们称之为 user manager。现在可以将该用户映射到主机上的用户吗?例如,如果john主机上有一个用户,我们可以映射john到manager吗?
buf*_*ufh 12
另一种方法是通过入口点。
\n这个例子依赖于gosu,它出现在最近的Debian 衍生品中,尚未出现在 Alpine 3.13 中(但出现在 Edge 中)。
\n您可以按如下方式运行此图像:
\ndocker run --rm -it \\\n --env UID=$(id -u) \\\n --env GID=$(id -g) \\\n -v "$(pwd):$(pwd)" -w "$(pwd)" \\\n imagename\nRun Code Online (Sandbox Code Playgroud)\ntree\n. \n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Dockerfile\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 files/\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 entrypoint\nRun Code Online (Sandbox Code Playgroud)\nFROM ...\n\n# [...]\n\nARG DOCKER_USER=default_user\n\nRUN addgroup "$DOCKER_USER" \\\n && adduser "$DOCKER_USER" -G "$DOCKER_USER"\n\nRUN wget -O- https://github.com/tianon/gosu/releases/download/1.12/gosu-amd64 |\\\n install /dev/stdin /usr/local/bin/gosu\n\nCOPY files /\n\nRUN chmod 0755 /entrypoint \\\n && sed "s/\\$DOCKER_USER/$DOCKER_USER/g" -i /entrypoint\n\nENTRYPOINT ["/entrypoint"]\nRun Code Online (Sandbox Code Playgroud)\ntree\n. \n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Dockerfile\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 files/\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 entrypoint\nRun Code Online (Sandbox Code Playgroud)\nUID通常是bash 中的只读变量--env,但如果由 docker标志设置,它将按预期工作gosu它是因为它很简单,但你可以让它与su或 一起使用sudo;但是它需要更多配置--env开关,你可以这样做:--env user="$(id -u):$(id -g)"和 在entrypoint: uid=${user%:*} gid=${user#*:}; 请注意,此时该UID变量在 bash 中将是只读的,这就是我切换为小写的原因...其余的调整留给读者是的,您可以从主机设置用户,但是您应该稍微修改 Dockerfile 以处理运行时用户。
FROM alpine:latest
# Overide user name at build, if buil-arg no passed, will create user named `default` user
ARG DOCKER_USER=default_user
# Create a group and user
RUN addgroup -S $DOCKER_USER && adduser -S $DOCKER_USER -G $DOCKER_USER
# Tell docker that all future commands should run as the appuser user
USER $DOCKER_USER
Run Code Online (Sandbox Code Playgroud)
现在,构建到 Docker
docker build --build-arg DOCKER_USER=$(whoami) -t docker_user .
Docker 中的新用户将是 Host 用户。
docker run --rm docker_user ash -c "whoami"
另一种方法只是传递和映射主机用户,而无需在 Dockerfile 中创建用户。
export UID=$(id -u)
export GID=$(id -g)
docker run -it \
--user $UID:$GID \
--workdir="/home/$USER" \
--volume="/etc/group:/etc/group:ro" \
--volume="/etc/passwd:/etc/passwd:ro" \
--volume="/etc/shadow:/etc/shadow:ro" \
alpine ash -c "whoami"
Run Code Online (Sandbox Code Playgroud)
您可以在此处和此处进一步阅读有关 docker 中用户的更多信息。
| 归档时间: |
|
| 查看次数: |
3524 次 |
| 最近记录: |