gpt4 book ai didi

linux - 添加具有较大用户 ID/UID 值的用户时 Docker 构建挂起

转载 作者:行者123 更新时间:2023-12-05 03:19:45 25 4
gpt4 key购买 nike

当尝试构建具有较大 UID 值的 docker 镜像时,例如 1000123456docker build 反复卡在 RUN useradd .

重现:

$ touch Dockerfile
$ echo FROM ubuntu:latest >> Dockerfile
$ echo RUN useradd -m -s /bin/bash -N -u 1000123456 jovyan >> Dockerfile
$ docker build --tag mirekphd/test-uid .
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM ubuntu:latest
---> d2e4e1f51132
Step 2/2 : RUN useradd -m -s /bin/bash -N -u 1000123456 jovyan
---> Running in 04707e01aefc

任何已知的解决方案(接受)或至少解决方法(赞成)?


更多信息

例如,当尝试对 Openshift/OKD 命名空间之一接受的值范围内的 UID 进行硬编码(仅用于调试)时,此错误会自行显现。

作为此问题的副作用,构建会占用大量磁盘空间(任何建议的解决方法都应避免此副作用):

$ docker system prune -f
Deleted Containers:
04707e01aefcda9ce9840389f1d59821e1ddb7dac535d416f99447e657ec5309
c3fc96209790ee7aa0c2c10bec2459e8ec3dbcc1dc7cfdd0a3e12960a28b9437
1ed4985b3e27eaff6394fd0243713573473ab59c9a82db865e40ebb40a391892

Total reclaimed space: 648.1GB

最佳答案

您可以使用 useradd--no-log-init 选项(或更短的:-l):

useradd --no-log-init -m -s /bin/bash -N -u 1000123456 jovyan

在 Docker 镜像中创建的巨大文件(/var/log/faillog/var/log/laSTLog)是 sparse files 。使用 --no-log-init 可避免创建这些文件(在您添加具有较大 uid 的用户的情况下会很大)。为什么这些文件很大?

useradd by default reserves space for all users, so when using (say), uid 10000, it reserves space for 10000 users, even if only user 10000 is used; for this, a sparse-file is created

来源:https://github.com/docker/hub-feedback/issues/2263#issuecomment-1205423533

引用资料(好像是很久以前的known issue):

关于linux - 添加具有较大用户 ID/UID 值的用户时 Docker 构建挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73351423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com