簡體   English   中英

Docker 撰寫服務通信

[英]Docker compose service communication

所以我有一個包含 3 個服務的 docker-compose 文件:后端、前端反應和 mongo。

后端 Dockerfile:

FROM ubuntu:latest
WORKDIR /backend-server
COPY ./static/ ./static
COPY ./config.yml ./config.yml
COPY ./builds/backend-server_linux ./backend-server
EXPOSE 8080
CMD ["./backend-server"]

前端 Dockerfile:

FROM nginx:stable
WORKDIR /usr/share/nginx/html
COPY ./build .
COPY ./.env .env
EXPOSE 80
CMD  ["sh", "-c", "nginx -g \"daemon off;\""]

所以沒什么不尋常的,我想。

docker-compose.yml:

version: "3"

services:
    mongo-db:
        image: mongo:4.2.0-bionic
        container_name: mongo-db
        volumes:
            - mongo-data:/data
        network_mode: bridge

    backend:
        image: backend-linux:latest
        container_name: backend
        depends_on:
            - mongo-db
        environment:
            - DATABASE_URL=mongodb://mongo-db:27017
            ..etc
        network_mode: bridge
        # networks: 
        #     - mynetwork
        expose:
            - "8080"
        ports:
            - 8080:8080
        links:
            - mongo-db:mongo-db
        restart: always

    frontend:
        image: frontend-linux:latest
        container_name: frontend
        depends_on:
            - backend
        network_mode: bridge
        links:
            - backend:backend
        ports:
            - 80:80
        restart: always

volumes:
    mongo-data:
        driver: local

這是有效的。 我的問題是,通過向后端添加ports: - 8080:8080 ,該服務器可用於主機。 從理論上講,網絡應該在沒有這些行的情況下工作,因為我在 docker docs 和這個問題中讀到了它,但是如果我刪除它,API 調用就會停止工作(但是在前端服務下的 docker-compose 中編寫的 curl 調用仍然可以工作)。

您的 React 前端正在從瀏覽器發出請求。 因此,在這種情況下,端點需要瀏覽器可以訪問您的 API,而不是分發靜態 js、css 和 html 文件的容器。

希望這張圖有點意思。

在此處輸入圖片說明

PS 如果您想特別不公開 API,您可以讓 Web 服務器將請求代理到 /api/ 到 API 容器,這將發生在網絡級別,這意味着您只需要公開一台服務器。

為此,我將 Angular 應用程序從 Nginx 中提供出來,然后將 /app1/api/* 的流量代理到一個容器,將 /app2/api/* 代理到另一個容器等

暫無
暫無

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

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