gpt4 book ai didi

docker - 如何在Docker容器镜像中创建tun接口(interface)?

转载 作者:行者123 更新时间:2023-12-02 02:13:39 26 4
gpt4 key购买 nike

我正在尝试使用 /dev/net/tun 创建一个 Docker 镜像。设备,以便镜像可以在 Linux、Mac 和 Windows 主机上使用。设备不需要访问主机的网络接口(interface)。

请注意传递 --device /dev/net/tun:/dev/net/tundocker run这是不可取的,因为这只适用于 Linux。

容器启动后,我可以通过运行手动添加设备:

$ sudo mkdir /dev/net
$ sudo mknod /dev/net/tun c 10 200
$ sudo ip tuntap add mode tap tap

但是当我将这些行添加到 Dockerfile 时,会导致错误:

Step 35/46 : RUN mkdir /dev/net
---> Running in 5475f2e4b778
Removing intermediate container 5475f2e4b778
---> c6f8e2998e1a
Step 36/46 : RUN mknod /dev/net/tun c 10 200
---> Running in fdb0ed813cdb
mknod: /dev/net/tun: No such file or directory
The command '/bin/sh -c mknod /dev/net/tun c 10 200' returned a non-zero code: 1

我相信这里的关键是从 docker build 中创建一个文件系统节点步?这可能吗?

最佳答案

/dev 目录很特殊,Docker 构建步骤不能真正在其中放置任何内容。 answer to question 56346114 中也提到了这一点。 .

显然,/dev 中的设备并不是一个包含数据的文件,而是一个占位符、一个地址、一个指针、一个指向内存中驱动程序代码的链接,在访问时会执行某些操作。内存中的此类驱动程序代码不是 Docker 镜像所保存的内容。

我通过将命令行代码放入包装我们真正想要运行的应用程序的 .sh 脚本中,在容器中创建了设备。

关于docker - 如何在Docker容器镜像中创建tun接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59451531/

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