gpt4 book ai didi

docker - Docker 容器和主机之间的共享命名管道 - 跨平台

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

我有一个在 Ubuntu Docker 容器 ( ubuntu-python ) 中创建的命名管道。我想从主机操作系统向这个管道发送数据,并从容器中的管道读取数据。

容器内:

我使用以下方法在容器内创建了管道

mkfifo 流

然后我使用

从流中读取

猫流

正如预期的那样,该命令似乎挂起,因为它正在等待一些输入

Docker 文件

然后我使用卷将命名管道共享到主机操作系统

    volumes:
- ./audio:/app/audio # stream is inside /app/audio

主机操作系统

我跑了

sudo bash -c "echo test > stream"

我希望这会写入流,这应该会导致原始 cat stream 命令取消挂起并打印 test,但输入和输出命令都继续挂起,表明数据实际上并未移动到容器中。我使用 bash -c 的原因是因为我需要 redirection to run as root .

在主机容器上运行的这一系列命令完美运行,但是一旦我引入主机和容器之间的数据量和移动,它就不再运行了。如何将数据从主机操作系统写入命名管道并使其显示在容器中?

作为引用,主机是运行 Ubuntu 20.04 的 WSL,但我计划将其部署在运行 Raspbian Lite 的 Raspberry Pi 3B+ 上。我还想将它分发给开源项目的其他用户,因此该解决方案应该与主机无关(至少对于可以实际运行 Ubuntu 容器的主机)。

最佳答案

使用 mkfifo -m a+rw stream 将允许任何用户写入流,而不仅仅是 root 用户。这是因为 -m 允许您指定类似于 chmod 的管道权限。因此,重定向不再需要以 root 身份运行。

现在我们可以简单地从主机操作系统使用 echo test > stream,输出将正确显示在容器中。

我不确定为什么使用 bash -c 写入管道实际上并没有将数据移动到容器中,而是 -m 标志为 mkfifo 表示我们不需要使用它。

关于docker - Docker 容器和主机之间的共享命名管道 - 跨平台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65385472/

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