[英]How to run one server docker container before client container
我有一個相當復雜的應用程序,我在客戶端上有下一個 js,在后端有 graphql 和 nginx 作為反向代理。
我在索引頁面上使用下一個 JS 增量 static 站點再生功能,這就是為什么我希望我的服務器在我的客戶端容器開始構建之前啟動並運行,因為當我運行 npm 運行構建時,它將從 Z572CDA4051902B5B04A2 獲取一些數據我的 docker 撰寫文件
version: "3"
services:
mynginx:
container_name: mynginx
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- 80:80
graphql:
container_name: graphql_server
depends_on:
- mynginx
build:
context: ./server
dockerfile: Dockerfile
mynextjs:
container_name: nextjs_server
depends_on:
- graphql
build:
context: ./client
dockerfile: Dockerfile
depends_on
和healthcheck
,當另一個容器已經工作時啟動容器
https://docs.docker.com/compose/compose-file/compose-file-v2/#healthcheck
像這樣的東西
services:
mynginx:
container_name: mynginx
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- 80:80
healthcheck:
test: ["CMD-SHELL", "wget -O /dev/null http://localhost || exit 1"]
timeout: 10s
graphql:
...
depends_on:
depends_on:
mynginx:
condition: service_healthy
簡單來說,就是等到graphql
服務正常啟動完畢后再運行mynextjs
服務。
恐怕在這種情況下, depends_on
(或links
)可能無法開箱即用。 原因是,雖然 Compose 在啟動graphql
服務之前確實啟動了mynextjs
服務,但它不會等到graphql
服務處於 READY state 時才啟動依賴服務。
基本上,您需要找到一種方法來告訴 Compose 等到graphql
服務處於 READY state 中。
Compose 文檔中的控制啟動和關閉順序中描述了該解決方案
我希望這可以幫助你。 干杯!!!
如果我正確理解您的問題,您需要延遲開始構建前端容器的映像,直到后端容器正在運行並准備就緒。
想到的最簡單的方法是使用配置文件來允許獨立啟動它們。
例如:
version: "3"
services:
mynginx:
container_name: mynginx
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- 80:80
profiles: ["backend"]
graphql:
container_name: graphql_server
depends_on:
- mynginx
build:
context: ./server
dockerfile: Dockerfile
profiles: ["backend"]
mynextjs:
container_name: nextjs_server
depends_on:
- graphql
build:
context: ./client
dockerfile: Dockerfile
profiles: ["frontend"]
然后鏈接開始類似:
docker-compose --profile backend -d up && docker-compose --profile frontend -d up
另一種選擇可能是拆分為兩個單獨的撰寫文件,它們之間有一個共享的 docker 網絡。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.