Доступ к общей библиотеке внутри контейнера Docker - PullRequest
1 голос
/ 26 сентября 2019

Цель:
Развертывание контейнера Docker, который может получить доступ к общим библиотекам хостов (liblinphone.so) или получить доступ к установке liphone на хосте.

Используемое программное обеспечение:
- Вычислительный модуль Raspberry Pi
- Моно (C #)
- Линфон с оберткой C #
- Докер

Резюме:
Я пишу код для RPi3 в Mono (C #).Этот код использует GPIO и установку linphone (версия Linphone ARM установлена ​​в этой системе).Код работает безупречно на родном Mono.Моя следующая цель - запустить его внутри контейнера Docker.Для этого я создал частный сервер 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 / установка.но вместо этого я должен смонтировать докер-сокет и запустить его на хосте.и это не принесло мне успеха (из-за невежества).

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

Это мой DockerFile:

FROM mono:latest
ADD . /src
WORKDIR /src
RUN xbuild BlackBox.csproj
CMD ["mono", "/src/bin/Debug/BlackBox.exe"]

Так что я должен сделать что-то вроде этого:

FROM mono:latest
ADD . /src
WORKDIR /src

RUN apt-get install neededthing another so_on

RUN xbuild BlackBox.csproj
CMD ["mono", "/src/bin/Debug/BlackBox.exe"]

Я прав, @Raedwald?

0 голосов
/ 26 сентября 2019

В Dockerfile, который создает контейнер, выполните команды установки, которые устанавливают пакет, предоставляющий общую библиотеку.

...