Docker镜像大小适用于不同的USER

时间:2018-02-07 18:50:02

标签: ubuntu docker size

更新 看起来这不是特定于Docker的东西,但可能是Ubuntu或useradd的东西..我发现/var/log/lastlog/var/log/faillog是罪魁祸首..之后:

RUN useradd -ms /usr/bin/tcsh -u 1000 -g users id1000

文件/var/log/lastlog的大小是~288 kB。但是这样做:

RUN useradd -ms /usr/bin/tcsh -u 10000000 -g users id10000000

相反,文件/var/log/lastlog的大小为2.8 GB。

现在我已经获得了这个新信息,添加了ubuntu标签..

这个文件是否会因添加用户的UID而增长?

原帖:

我有以下Dockerfile(显然不是很有用,最小化用于演示问题):

FROM ubuntu

RUN apt-get update

WORKDIR /usr/src/

RUN useradd -ms /usr/bin/tcsh -u 1001 -g users daroo ; adduser daroo sudo ; echo daroo:daroo | chpasswd
USER daroo
#RUN useradd -ms /usr/bin/tcsh -u 16777249 -g users otheruser ; adduser otheruser sudo ; echo otheruser:otheruser | chpasswd
#USER otheruser
#RUN useradd -ms /usr/bin/tcsh -u 2000 -g users anotherone ; adduser anotherone sudo ; echo anotherone:anotherone | chpasswd
#USER anotherone

CMD ["/usr/bin/tcsh"]

在底部,我创建一个用户,将用户添加到sudo组,并设置用户的密码(与此演示的用户名相同)..然后我指定USER,以便在启动容器时从图像中,该用户帐户是在正在运行的容器中使用的帐户..

现在问题:如果我制作三个单独的图像(每个用户列出一个),对于用户ID较大的用户,图像大小是巨大的..对于其他人来说,这是完全合理的..什么造成这个?

% sudo docker build --no-cache -t docker-check-daroo .
[...]
% [edit Dockerfile -> comment RUN and USER lines associated with daroo user, uncomment those for otheruser]
% sudo docker build --no-cache -t docker-check-otheruser .
[...]
% [edit Dockerfile -> comment RUN and USER lines associated with otheruser user, uncomment those for anotherone]
% sudo docker build --no-cache -t docker-check-anotherone .
[...]
% sudo docker images | grep check
docker-check-anotherone         latest                           669db89e8558        4 minutes ago       151MB
docker-check-otheruser          latest                           adcd7cd4906a        5 minutes ago       5.59GB
docker-check-daroo              latest                           e9569a538777        7 minutes ago       150MB

1 个答案:

答案 0 :(得分:0)

如果有其他人遇到这个问题,这就是我找到的并快速解决方法..

显然,/ var / log / lastlog是一个稀疏文件,它与Ubuntu如何确保在创建新用户时不重用UID有关。

似乎可以解决这个问题的方法是在useradd命令中包含一个“-l”参数。来自useradd手册页:

   -l, --no-log-init
       Do not add the user to the lastlog and faillog databases.

       By default, the user's entries in the lastlog and faillog databases are resetted to avoid reusing the entry
       from a previously deleted user.

       For the compatibility with previous Debian's useradd, the -O option is also supported.

所以,我刚刚将Dockerfile末尾附近的行更新为:

RUN useradd -ms /usr/bin/tcsh -l -u 16777249 -g users otheruser ; adduser otheruser sudo ; echo otheruser:otheruser | chpasswd
USER otheruser

,无论使用何种UID,结果大小都是一致的。