docker - 访问 Docker 容器内的共享库

标签 docker mono shared-libraries raspberry-pi3 linphone

目标:
部署一个可以访问主机共享库(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内部的共享库,以下是其中一种方法:

  1. 在 Dockerfile 中使用“COPY”命令来复制容器内的共享库/依赖项。示例:复制 {local_path} {docker_path}
  2. 设置环境变量,在标准目录集之前首先搜索共享库。例如,对于基于 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/

相关文章:

python - 在pycharm中共享相同的远程docker

c# - Mono - XDocument.Load 因 LoadOptions.PreserveWhitespace 而失败

linux - 如何避免在 .so 文件名中包含版本号

java - 如何使用 docker-java 玩 docker run --rm ?

docker - 如何访问 Docker 桌面使用的 wsl2?

c# - PerlEmbed - C# - 单声道 - Linux

c# - Process.Start 崩溃无一异常(exception)

c - 将函数指针作为参数传递时出错

c++ - 在给定名称和签名的情况下调用共享库中的函数

python - docker.errors.DockerException : Error while fetching server API version