YanWenKun / ComfyUI-Docker

🐳Dockerfile for 🎨ComfyUI. | 容器镜像与启动脚本
https://hub.docker.com/r/yanwk/comfyui-boot
Other
443 stars 84 forks source link

git clone fatal: Insufficient randomness. Seems ssh missing in docker #64

Open huangluzhi opened 4 days ago

huangluzhi commented 4 days ago

$ docker run -it --rm --name comfyui --gpus all -p 8188:8188 -v "$(pwd)"/storage:/home/runner -e CLI_ARGS="" yanwk/comfyui-boot:cu121 ######################################## [INFO] Downloading ComfyUI & Manager... ########################################

YanWenKun commented 4 days ago

Insufficient randomness 一般是 RNG 问题,而 Docker 默认使用宿主机的随机数发生器,你可以在宿主机上安装 rng-tools (或者特定发行版的对应工具)来解决这个问题

huangluzhi commented 4 days ago

已安装rng-tools,还是报同样的错误。

$ yum install rng-tools
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors-tlinux.tencentyun.com
 * extras: mirrors-tlinux.tencentyun.com
 * tlinux: mirrors-tlinux.tencentyun.com
 * updates: mirrors-tlinux.tencentyun.com
Package rng-tools-6.3.1-5.tl2.x86_64 already installed and latest version
Nothing to do

尝试从宿主机在storage下clone https://github.com/comfyanonymous/ComfyUI.git/,再进入容器执行脚本`sh /home/scripts/download.sh`,在git pull时报错

########################################
[INFO] Downloading ComfyUI & Manager...
########################################
+ cd /home/runner
+ git clone https://github.com/comfyanonymous/ComfyUI.git
fatal: destination path 'ComfyUI' already exists and is not an empty directory.
+ cd /home/runner/ComfyUI
+ git pull
fatal: unable to access 'https://github.com/comfyanonymous/ComfyUI.git/': Insufficient randomness

下面是chatgpt的回答,按照指引做了2、4、5、6,没有奏效,容器内熵值也是够的。1、3要在容器里安装,应该需要修改dockerfile,就没弄

在 Docker 容器中出现 "Insufficient randomness" 错误,而宿主机没有问题,说明容器内的熵池不足,而宿主机的熵足够充裕。虚拟化环境(如 Docker 容器)中熵源较少,导致需要随机数的操作(如 TLS/SSL 协议)失败。

以下是专门针对 Docker 中解决该问题的步骤:

1. 在 Docker 容器中安装 haveged

和在宿主机上类似,您可以在 Docker 容器中安装 haveged 来补充熵池。

2. 使用 --device /dev/urandom:/dev/random

可以通过绑定宿主机的 /dev/urandom 到容器中的 /dev/random,利用宿主机的熵源。这是一种较为常见的解决熵不足的方法。

启动容器时

   docker run --device /dev/urandom:/dev/random -it <image> /bin/bash

这会让容器中的随机数生成使用宿主机的熵源。

3. 容器内启用 rng-tools

rng-tools 也可以增加 Docker 容器的熵。和宿主机一样,你可以在容器中安装 rng-tools

4. 使用宿主机的 havegedrng-tools

如果你不希望在容器内安装额外的软件,可以让宿主机上的 havegedrng-tools 提供熵服务。确保宿主机的熵源充足,并且容器通过宿主机的熵源生成随机数。

5. 使用 Docker 的 --privileged 选项

在某些情况下,Docker 容器运行时缺少权限可能会导致熵不足。你可以尝试使用 --privileged 选项运行容器:

   docker run --privileged -it <image> /bin/bash

这将给予容器更多的权限,可能有助于缓解熵不足的问题。

6. 检查系统熵值

在容器中检查熵值,确保容器中可用的熵足够:

   cat /proc/sys/kernel/random/entropy_avail

如果熵值过低(如小于100),就需要使用上述方法之一来增加熵源。

这些方法可以帮助你在 Docker 环境中解决熵不足导致的 "Insufficient randomness" 错误。如果问题依然存在,可能需要进一步检查容器的配置或使用的镜像。

YanWenKun commented 4 days ago

这些就是常用的 RNG 办法了,而且熵值都正常的话,我猜问题可能与权限有关。 cu121 为了方便 WSL2 Docker Desktop 部署,用了低特权用户(runner),其他镜像都是用的 root 用户。 我建议试试其他镜像,比如: https://github.com/YanWenKun/ComfyUI-Docker/tree/main/cu124-cn 如果嫌这个镜像臃肿的话,删掉 download.shdownload-models.txt 中不要的项目即可。

huangluzhi commented 3 days ago

其他镜像都试了,还是一样的问题,看起来不是权限问题

1032  04/11/24 15:02:36 docker run  -it --rm   --name comfyui   --gpus all   -p 8188:8188   -v "$(pwd)"/storage:/home/runner   -e CLI_ARGS=""   yanwk/comfyui-boot:cu124-cn
 1033  04/11/24 15:10:45 docker run  -it --rm   --name comfyui   --gpus all   -p 8188:8188   -v "$(pwd)"/storage:/home/runner   -e CLI_ARGS=""   yanwk/comfyui-boot:cu124-megapak
 1034  04/11/24 16:01:22 docker run  -it --rm   --name comfyui   --gpus all   -p 8188:8188   -v "$(pwd)"/storage:/home/runner   -e CLI_ARGS=""   yanwk/comfyui-boot:cu121-megapak
 1035  04/11/24 16:11:22 docker run  -it --rm   --name comfyui   --gpus all   -p 8188:8188   -v "$(pwd)"/storage:/home/runner   -e CLI_ARGS=""   yanwk/comfyui-boot:nightly
 1036  04/11/24 16:15:24 docker system prune -a
 1037  04/11/24 16:15:37 docker run  -it --rm   --name comfyui   --gpus all   -p 8188:8188   -v "$(pwd)"/storage:/home/runner   -e CLI_ARGS=""   yanwk/comfyui-boot:nightly