簡體   English   中英

如何在客戶端容器之前運行一台服務器 docker 容器

[英]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_onhealthcheck ,當另一個容器已經工作時啟動容器

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 網絡。

參考: https://docs.docker.com/compose/profiles/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM