目标:
部署一个可以访问主机共享库(liblinphone.so)或可以访问主机上liiphone安装的Docker容器。
使用的软硬件:
- Raspberry Pi 计算模块
- 单声道(C#)
- Linphone 与 C# 包装器
- Docker
摘要:
我正在 Mono(C#) 中为 RPi3 编写代码。此代码使用 GPIO 和 linphone 安装(一个 Linphone
该系统上安装了 ARM 版本)。该代码确实可以在 native Mono 上完美运行。我的下一个目标是在 Docker 容器中运行它。为此,我设置了一个私有(private) Gitlab 服务器、Docker 注册表和一个 Gitlab 管道来制作 Docker 镜像。 Docker 镜像的构建没有任何错误。
当我运行代码时,显然找不到 liblinphone.so 文件..但我不知道该怎么做。
Docker运行命令:
docker run --privileged -v /etc/ld.so.cache:/etc/ld.so.cache -v /etc/ld.so.conf.d/:/etc/ld.so.conf.d/ -v /usr/local/lib/:/usr/local/lib/ -v /var/run/docker.sock:/var/run/docker.sock [registry]:5000/[image]:latest
我添加了一些 .so 文件和一些引用所在的卷(有些卷不是必需的)。 --privileged 部分用于访问 GPIO。
错误:
Unhandled Exception:
System.DllNotFoundException: linphone assembly:<unknown assembly> type:<unknown type> member:(null)
at (wrapper managed-to-native) Linphone.Core.linphone_core_set_log_level_mask(uint)
at Linphone.Core.SetLogLevelMask (System.UInt32 mask) [0x00001] in <5285048db55d447fae3be4c32e253dbd>:0
at BlackBox.Phone.CreatePhone (System.String username, System.String password, System.String server, System.Int32 port, System.String agent, System.String version) [0x00001] in <5285048db55d447fae3be4c32e253dbd>:0
at BlackBox.BlackBox..ctor (BlackBox.BlackBox+AppFunction appFunction) [0x00198] in <5285048db55d447fae3be4c32e253dbd>:0
at BlackBox.MainClass.Main (System.String[] args) [0x00001] in <5285048db55d447fae3be4c32e253dbd>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.DllNotFoundException: linphone assembly:<unknown assembly> type:<unknown type> member:(null)
at (wrapper managed-to-native) Linphone.Core.linphone_core_set_log_level_mask(uint)
at Linphone.Core.SetLogLevelMask (System.UInt32 mask) [0x00001] in <5285048db55d447fae3be4c32e253dbd>:0
at BlackBox.Phone.CreatePhone (System.String username, System.String password, System.String server, System.Int32 port, System.String agent, System.String version) [0x00001] in <5285048db55d447fae3be4c32e253dbd>:0
at BlackBox.BlackBox..ctor (BlackBox.BlackBox+AppFunction appFunction) [0x00198] in <5285048db55d447fae3be4c32e253dbd>:0
at BlackBox.MainClass.Main (System.String[] args) [0x00001] in <5285048db55d447fae3be4c32e253dbd>:0
我的猜测是我无法安装 linphone .so/installation。但我必须安装 docker 套接字并在主机上本地运行它。这也没有让我成功(由于无知)。
最佳答案
要访问docker内部的共享库,以下是其中一种方法:
- 在 Dockerfile 中使用“COPY”命令来复制容器内的共享库/依赖项。示例:复制 {local_path} {docker_path}
- 设置环境变量,在标准目录集之前首先搜索共享库。例如,对于基于 Linux 的操作系统,使用 LD_LIBRARY_PATH。环境变量可以通过 Docker's Environment replacement (ENV) 设置示例:ENV LD_LIBRARY_PATH={docker_path}:$LD_LIBRARY_PATH
关于docker - 访问 Docker 容器内的共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58113780/