[Docker Tips] 构建与本地用户相同 gid, uid 的镜像

用 docker 麻烦之一是镜像的用户跟本地主机用户不同,导致一些恼人的文件权限问题,即使在 docker run 时指定 –-user 也不一定解决。

较好的方案是创建镜像时,给镜像添加本地主机用户的 gid, uid. 如果使用别人的镜像,把 dockerfile 下载了自己改一改。

在 dockerfile 里设置 ARG, ARG 是 docker 创建镜像时可用的变量,创建完成后被清除,也即无法在容器使用。

ARG GROUP_ID
ARG USER_ID
ARG USER_NAME

给镜像添加对应用户组和用户,并切换到该用户。

RUN groupadd -r --gid ${GROUP_ID} ${USER_NAME} \
  && useradd --no-log-init -r -g ${GROUP_ID} -u ${USER_ID} ${USER_NAME}
USER ${USER_NAME}

构建镜像时通过 --build-tag 传入主机的 gid,uid 和用户名。从而构建与本地主机用户有相同 gid 和 uid 和用户名的镜像。

docker build -t tag_name --build-arg USER_ID=$(id -u) \
--build-arg GROUP_ID=$(id -g) --build-arg USER_NAME=user_name .

你可能感兴趣的:([Docker Tips] 构建与本地用户相同 gid, uid 的镜像)