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

标签 linux docker dockerfile openshift docker-build

当尝试构建具有较大 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/

相关文章:

azure - 如何编写 docker 文件以使用 Azure 应用服务中的 PORT 环境变量

linux - 电子邮件主机被带有公鸡的网站标记为垃圾邮件骡子

Docker 清理 - 我可以删除/var/lib/docker/containers 下的旧目录吗

linux - 为什么我不能在 Ubuntu 中使用 wget 获取此页面?

networking - 如何从另一台机器而不是其 Windows 主机访问 docker 容器?

docker - docker :删除其他 docker 镜像上的文件/镜像依赖性

python - Docker容器正在运行但无法找到URL

php - 当我在docker中使用composer时“Could not delete ./”

linux - 经常在特定时间做某事

linux - 将内容保存在 stdin 中以供另一个脚本读取