我正在使用映像nvidia/cuda:10.1-cudnn7-runtime-ubuntu16.04
创建一个docker容器。我以前用来运行它的基本上是:
docker run \
--name <my_container_name> \
-it \
--user root \
--workdir / \
--net host \
--env http_proxy=http://127.0.15.1:3128/ \
--env https_proxy=http://127.0.15.1:3128/ \
--env ftp_proxy=http://127.0.15.1:3128/ \
nvidia/cuda:10.1-cudnn7-runtime-ubuntu16.04
由于其他原因,需要更改代理。创建后,我的容器的大小约为30KB。在容器中,我需要运行usermod
命令以将容器中的用户名更改为主机中的用户名。首先,我通过以下方式更改了群组:
groupmod -g 1712325121 -n <my_username> user
user
是容器中的用户名。 1712325121是主机中的组ID,由id <my_username>
返回。
在groupmod
之后,我以以下方式运行usermod
:
usermod -d /home/<my_username> -m -u 1712506013 -l <my_username> user
其中id <my_username>
返回的主机上我的用户的ID是1712506013。
我的问题是,在运行usermod
之后,我的容器大小从大约30KB增长到了555GB。这种增长的原因是什么,我该如何解决?
答案 0 :(得分:1)
对于任何对此问题感到好奇的人,都是由于以下问题:https://github.com/sagemathinc/cocalc/issues/2287
有问题的两个文件的大小:
root@dde99a5ac91f:/var/log# ls -alh
total 592K
drwxr-xr-x 1 root root 4.0K Sep 3 15:18 .
drwxr-xr-x 1 root root 4.0K Nov 8 2019 ..
-rw-r--r-- 1 root root 52G Sep 11 14:48 faillog
-rw-rw-r-- 1 root utmp 466G Sep 11 14:48 lastlog
由于我的用户ID很大,所以这些文件最终变得非常大。
答案 1 :(得分:0)
使用写时复制文件系统,对容器内部文件的任何更改都会触发整个文件的副本。并且usermod命令将修改旧uid拥有的文件以具有新uid。所有这些uid更改都会复制整个文件,因此,如果该用户在映像中拥有超过500GB的文件,则您现在已将所有这些文件复制到了容器文件系统中。