mbo*_*ato 51 docker boot2docker
在虚拟化Linux系统中耗尽熵似乎是一个常见问题(例如/ dev/random极慢?,让linux缓冲/ dev/random).尽管使用了硬件随机数生成器(HRNG),但经常建议使用像HAVEGED这样的熵收集守护进程.但是,熵收集守护程序(EGD)无法在Docker容器内运行,它必须由主机提供.
使用EGD适用于基于Linux发行版(如Ubuntu,RHEL等)的docker主机.在boot2docker中运行这样的守护进程 - 基于Tiny Core Linux(TCL) - 似乎是另一个故事.尽管TCL具有扩展机制,但是熵收集守护程序的扩展似乎不可用.
因此,EGD似乎是在(生产)托管环境中运行docker容器的正确解决方案,但是如何解决它在boot2docker中进行开发/测试?
由于在boot2docker中运行EGD似乎太难了,我想只需使用/ dev/urandom而不是/ dev/random.使用/ dev/urandom不太安全,但对于大多数没有生成长期加密密钥的应用程序仍然可以.至少它应该适用于boot2docker中的开发/测试.
mbo*_*ato 50
我刚刚意识到,从主机/ dev/urandom到容器中挂载/ dev/urandom很简单:
$ docker run -v /dev/urandom:/dev/random ...
Run Code Online (Sandbox Code Playgroud)
结果如预期:
$ docker run --rm -it -v /dev/urandom:/dev/random ubuntu dd if=/dev/random of=/dev/null bs=1 count=1024
1024+0 records in
1024+0 records out
1024 bytes (1.0 kB) copied, 0.00223239 s, 459 kB/s
Run Code Online (Sandbox Code Playgroud)
至少我知道如何构建我自己的boot2docker图像;-)
Ole*_*ets 13
我发现最优雅的解决方案是在单独的容器中运行Haveged:
docker pull harbur/haveged
docker run --privileged -d harbur/haveged
Run Code Online (Sandbox Code Playgroud)
检查是否有足够的熵可用:
$ cat /proc/sys/kernel/random/entropy_avail
2066
Run Code Online (Sandbox Code Playgroud)
另一种选择是安装rng-tools包并将其映射为使用 /dev/urandom
yum install rng-tools
rngd -r /dev/urandom
Run Code Online (Sandbox Code Playgroud)
有了这个,我不需要在 docker 容器中映射任何卷。
由于我不喜欢修改 Docker 容器以进行开发/测试,因此我尝试修改 boot2docker 映像。幸运的是,boot2docker 镜像是使用 Docker 构建的,并且可以轻松扩展。所以我设置了自己的 Docker build boot2docker-urandom。它使用此处找到的 udev 规则扩展了标准 boot2docker 映像。
构建您自己的 boot2docker.iso 映像非常简单
$ docker run --rm mbonato/boot2docker-urandom > boot2docker.iso
Run Code Online (Sandbox Code Playgroud)
要替换 boot2docker 附带的标准 boot2docker.iso,您需要:
$ boot2docker stop
$ boot2docker delete
$ mv boot2docker.iso ~/.boot2docker/
$ boot2docker init
$ boot2docker up
Run Code Online (Sandbox Code Playgroud)
限制,来自 Docker 容器内部的 /dev/random 仍然会阻塞。最有可能的是,因为 Docker 容器不直接使用主机的 /dev/random,而是使用相应的内核设备 - 这仍然会阻塞。
归档时间: |
|
查看次数: |
20407 次 |
最近记录: |