更新:
看起来这不是特定于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组,并设置用户的密码(为了演示目的,与用户名相同)。然后,我指定用户,这样当从镜像启动容器时,该用户帐户就是在运行容器中使用的帐户。
现在的问题是:如果我创建三个单独的镜像(每个用户一个镜像),对于具有大用户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