我有一个在 Ubuntu Docker 容器 ( ubuntu-python )中创建的命名管道。我想从主机操作系统将数据发送到此管道,并从容器的管道中读取数据。
容器内:
我使用以下命令在容器内创建了管道
mkfifo stream
然后我使用从流中读取
cat stream
正如预期的那样,该命令似乎挂起,因为它正在等待某些输入
Docker 文件
然后,我使用卷将命名管道共享到主机操作系统
volumes:
- ./audio:/app/audio # stream is inside /app/audio
Run Code Online (Sandbox Code Playgroud)
主机操作系统:
我跑了
sudo bash -c "echo test > stream"
我希望这会写入流,这应该会导致原始cat stream
命令取消挂起并 print test
,但输入和输出命令继续挂起,表明数据实际上并未移入容器中。我使用的原因bash -c
是因为我需要重定向以 root 身份运行。
这一系列在主机操作系统上运行的命令运行得很好,但是一旦我引入了卷以及主机和容器之间的数据移动,它就不再起作用了。如何从主机操作系统将数据写入命名管道并使其显示在容器中?
作为参考,主机是运行 Ubuntu 20.04 的 WSL,但我计划将其部署在运行 Raspbian Lite 的 Raspberry Pi 3B+ 上。我还想将其分发给开源项目的其他用户,因此该解决方案应该与主机无关(至少对于可以实际运行 Ubuntu 容器的主机而言)。