如何在Docker容器之间共享库?

时间:2018-12-03 17:22:34

标签: c++ qt docker docker-compose

我是Docker的新手,我想使用带有Docker compose的两个容器创建我的第一个应用程序。

我的第一个容器包含Qt库,第二个容器包含OpenFace库。

我想使用Qt容器(通过qmake)构建我的C ++项目,该项目引用第二个容器中的OpenFace库。

因此,我创建了一个docker-compose.yml文件,如下所示:

version: "3"

services:
 openface:
  image: algebr/openface:latest
  tty: true
  devices:
   - "/dev/video0:/dev/video0"
  environment:
   - DISPLAY=$DISPLAY
  volumes:
   - "$HOME/.Xauthority:/root/.Xauthority:rw"
   - "./Workspace:/Workspace"

 qt:
  image: sgclark/trusty-qt59
  volumes:
   - "./Workspace:/Workspace"

Workspace文件夹是包含C ++项目的共享文件夹。

容器正确启动,但没有预期的结果。 当我使用qmake生成项目时,由于找不到OpenFace库,它会返回错误。

我以正确的方式使用Docker吗?如果是,该如何解决我的设置以构建和运行该应用程序?

预先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

Docker容器彼此隔离,因此它们无法看到彼此的进程或文件系统。在您的示例中,两个容器都可以使用工作空间目录,但是每个容器只能访问自己的文件系统和工作空间目录。

要同时访问Qt和openface,必须将两个docker映像“合并”到一个。在这种情况下,合并意味着编写一个以sgclark / trusty-qt59为基础的Dockerfile,然后安装openface库,以便两者均可用于构建您的软件。

Docker没有提供合并两个映像的方法,因此您将以这两个映像中的一个为基础写出第三个映像。