热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Dockerfile将主机用户UID和GID复制到映像

如何解决《Dockerfile将主机用户UID和GID复制到映像》经验,为你挑选了1个好方法。

类似于关于从主机复制容器中的UID/GID的SO帖子,但是如何使用具有复制UID和GID的用户构建映像?最好,你如何使用dockerfile做到这一点?

我可以使用bash脚本来完成它:

#!/bin/bash

# current uid and gid
curr_uid=`id -u`
curr_gid=`id -g`

# create bb.dockerfile:
cat < bb.dockerfile
 FROM ubuntu:xenial-20170214
 ARG UNAME=testuser
EOF1

 echo ARG UID=${curr_uid} >> bb.dockerfile
 echo ARG GID=${curr_gid} >> bb.dockerfile

cat <> bb.dockerfile
 RUN groupadd -g \$GID \$UNAME
 RUN useradd -m -u \$UID -g \$GID -s /bin/bash \$UNAME
 USER \$UNAME
 CMD /bin/bash
EOF2

docker build -f bb.dockerfile -t testimg .

这个bash将生成一个docker文件,如下所示并在其上构建.

 FROM ubuntu:xenial-20170214
 ARG UNAME=testuser
 ARG UID=1982
 ARG GID=1982
 RUN groupadd -g $GID $UNAME
 RUN useradd -m -u $UID -g $GID -s /bin/bash $UNAME
 USER $UNAME
 CMD /bin/bash

我要求的是从dockerfile中删除硬编码主机UID 1982和GID 1982.



1> BMitch..:

您可以将其作为构建arg传递.您的Dockerfile可以是静态的:

FROM ubuntu:xenial-20170214
ARG UNAME=testuser
ARG UID=1000
ARG GID=1000
RUN groupadd -g $GID -o $UNAME
RUN useradd -m -u $UID -g $GID -o -s /bin/bash $UNAME
USER $UNAME
CMD /bin/bash

然后你将在构建命令上传递选项:

docker build --build-arg UID=$(id -u) --build-arg GID=$(id -g) \
  -f bb.dockerfile -t testimg .

请注意,我以不同的方式解决了类似的问题,通过以root身份运行入口点来查看主机卷挂载的文件/目录权限,并调整容器内用户的uid/gid以匹配卷uid/GID.进行该更改后,它会从root用户访问已修改的uid/gid用户并运行原始命令/入口点.结果是图像可以在任何开发者机器上保持不变.在我的jenkins-docker repo中可以找到这方面的一个例子:

https://github.com/sudo-bmitch/jenkins-docker


推荐阅读
author-avatar
溪流-ju_506
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有