用 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 .
网友评论