使用Docker Compose引用服务

我有问题调用什么应该从我的“主”( web )服务的一些Docker撰写服务中定义。 我有以下docker-compose.yml文件:

 version: '2' services: db: image: postgres volumes: - postgres-db-volume:/data/postgres pdftk: image: mnuessler/pdftk volumes: - /tmp/manager:/work ffmpeg: image: jrottenberg/ffmpeg volumes: - /tmp/manager:/files web: build: . command: python manage.py runserver 0.0.0.0:8000 volumes: - .:/code - /tmp/manager:/files ports: - "8000:8000" depends_on: - db - pdftk - ffmpeg volumes: postgres-db-volume: 

我能够完美地使用从web db ,但不幸的是不是pdftkffmpeg (这些只是命令行实用程序,当我运行web的shell时,未定义):

 manager$ docker-compose run web bash Starting manager_ffmpeg_1 Starting manager_pdftk_1 root@16e4b755172d:/code# pdftk bash: pdftk: command not found root@16e4b755172d:/code# ffmpeg bash: ffmpeg: command not found 

我怎样才能在web服务中定义pdftkffmpeg ? 是depends_on不是适当的指令? 我应该扩展web的Dockerfile来调用一个入口点脚本来安装在其他两个服务中find的内容(尽pipe这似乎适得其反)。

尝试删除和重新生成后,添加pdftkffmpegweb服务,但没有解决它。

我能做什么?

谢谢!

看起来像是“依赖”的误解。 它用于设置容器的起始订单。

例如:在Web服务器之前启动数据库等

如果您想要访问安装在其他容器中的工具,则必须打开一个ssh连接,例如:

 ssh pdftk <your command> 

但我会安装nessecary工具到Web容器的图像。 扩展Dockerfile安装这两个工具应该做的伎俩。

要访问“工具”,你不需要安装SSH,这很可能是相当复杂的,而不是想要的。 使用depends_on时,容器不会“合并为一个”。

Depends_on的启动顺序更less,它的“ruff”容器启动顺序,例如,尽pipe应用程序依赖于数据库,但是在启动应用程序时,db容器进程还没有完全启动 – 现在依赖项是,在大多数情况下,而是用来通知何时一个容器需要重新初始化时,他所依赖的其他容器例如是否被重新创build。

除此之外,启动您的容器并将docker-socket安装到它们中。 添加这个:

 services: web: volumes: - /var/run/docker.sock:/var/run/docker.sock 

现在,在Web服务器上,您需要安装Docker,您可以:

docker exec pdftk <thecommand>

这是在服务上运行命令的常用方式。

您当然可以使用基于http / api的实现,在这种情况下,您不需要公开任何端口或装入套接字,更多地,您可以使用其服务名称访问服务

ping pdftkping ffmpeg

编辑:下面描述的方法,不适用于OP的问题。 仍然留在这里作为教育信息


除了@opHASnoNAME描述的选项之外,你可以尝试为pdftkffmpeg声明容器卷,并直接使用二进制文件,如下所示:

 ffmpeg: volumes: - /usr/local/bin 

并将其挂载到Web容器上:

 web: volumes_from: - ffmpeg 

请注意,这种方法有一些限制:

  • ffmpeg挂载的path/usr/local/bin不应该存在于web中,否则您可能只需要挂载这些文件。
  • web/usr/local/bin必须位于$PATH
  • 因为这是有限的二进制链接,这可能会失败,由于不同的Linux版本,缺less共享库等… – 所以它实际上只适用于独立的二进制文件
  • 所有使用volumes_fromvolumes_from容器都必须部署在同一台主机上

但是我仍然使用这个和那里,即与dockerdocker-compose二进制文件。