gpt4 book ai didi

docker -/dev 在 Docker 中如何工作?

转载 作者:行者123 更新时间:2023-12-02 18:29:30 27 4
gpt4 key购买 nike

我对 /dev/random 有一些问题我将其替换为 /dev/urandom在我的一些服务器上:

lrwxrwxrwx 1 root root 12 Jul 22 21:04 /dev/random -> /dev/urandom

我已经用 Docker 替换了我的一些基础设施。我想,替换 /dev/random 就足够了在我的主机上。但是在启动服务时,我很快注意到一些RNG操作被阻塞了,因为它使用了 /dev/random的原始实现。 .

我写了一个小测试程序来证明这种行为:
package main

import (
"fmt"
"os"
)

func main() {

f, err := os.Open("/dev/random")
if err != nil {
panic(err)
}

chunk := make([]byte, 1024)
index := 0
for {
index = index + 1
_, err := f.Read(chunk)
if err != nil {
panic(err)
}
fmt.Println("iteration ", index)
}
}

在主机(具有符号链接(symbolic link))上执行此程序按预期工作 - 在我关闭它之前它不会阻塞和运行。

在容器中运行它时,它会在第一次迭代后阻塞(至少在我的机器上)。

我显然可以通过将我的随机文件安装到容器中来解决这个问题:
docker run -it --rm -v /dev/random:/dev/random bla

但这不是这个问题的重点。我想知道,以下内容:
  • Docker 如何设置/dev
  • 中列出的设备
  • 为什么不只是使用主机的(某些)设备文件。
  • 最佳答案

    Docker 从不使用任何主机系统的文件系统,除非您明确指示它这样做。 /dev 中的设备文件是什么(如果有的话)被烘焙到图像中。

    另请注意,传统的 Unix 设备模型是设备"file"是字符或 block 特殊设备,以及一对主要和次要设备号,并且任何实际处理都在内核中完成。相关地,主机的内核在所有 Docker 容器之间共享。因此,如果您修复了主机损坏的 /dev/random那么你的容器也会继承这个修复;但只是更改主机的/dev 中的内容不会有任何影响。

    关于docker -/dev 在 Docker 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51468750/

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