[英]Referencing services with Docker Compose
我有問題調用我的“主”( web
)服務中的某些Docker Compose服務中應該定義的內容。 我有以下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
,但遺憾的是不是pdftk
或ffmpeg
(這些只是在運行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
服務中定義pdftk
和ffmpeg
? depends_on
是不是適當的指令? 我應該擴展web
的Dockerfile來調用入口點腳本來安裝其他兩個服務中找到的內容(即使這看起來會適得其反)?
嘗試在添加pdftk
和ffmpeg
后刪除並重建web
服務,但這並沒有解決它。
我能做什么?
謝謝!
看起來像是對“depends_on”的誤解。 它用於設置容器的起始順序。
例如:在Webserver等之前啟動數據庫
如果要訪問安裝在其他容器中的工具,則必須打開ssh連接,例如:
ssh pdftk <your command>
但我會將nessecary工具安裝到Web容器映像中。 擴展Dockerfile以安裝這兩個工具應該做的伎倆。
編輯:下面描述的方法不適用於OP的問題。 仍然把它留在這里作為教育信息 。
除了@opHASnoNAME描述的選項之外......您可以嘗試為pdftk
和ffmpeg
聲明容器卷並直接使用二進制文件,如下所示:
ffmpeg:
volumes:
- /usr/local/bin
並將其掛載到您的Web容器上:
web:
volumes_from:
- ffmpeg
請注意,此方法有一些限制:
ffmpeg
掛載的路徑/usr/local/bin
不應存在於web中,否則您可能只需要掛載文件。 web
, /usr/local/bin
必須在$PATH
。 volumes
和volumes_from
所有容器必須部署在同一主機上 但我仍然在這里和那里使用它,即使用docker
或docker-compose
二進制文件。
要訪問“工具”,您不需要安裝SSH,這很可能非常復雜,不需要。 使用depends_on時,容器不會“合並為一個”。
Depends_on甚至比啟動訂單更少,它更多的是“ruff容器啟動順序。例如,即使應用程序取決於數據庫,也會發生,當應用程序已經啟動時,數據庫容器進程尚未完全啟動 - 依賴於現在是,在大多數情況下,用於在容器需要重新初始化時通知,當他依賴的其他容器例如重新創建時。
除此之外,啟動容器並將docker-socket安裝到其中。 添加這個:
services:
web:
volumes:
- /var/run/docker.sock:/var/run/docker.sock
現在,在需要安裝docker的Web服務器上,您可以執行以下操作:
docker exec pdftk <thecommand>
這是在服務上運行命令的常用方法。
您當然可以使用基於http / api的實現,在這種情況下,您不需要公開任何端口或掛載套接字,更多,您可以使用其服務名稱訪問服務
ping pdftk
或ping ffmpeg
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.