簡體   English   中英

反應無法訪問 API docker-compose

[英]react can't access API docker-compose

我有三個容器:MySQL 8、Spring Boot 和 React,並制作了 docker-compose.yml,完全基於 Callicoder https://github.com/callicoder/spring-security-react-ant-design-polls-app

還嘗試了 npm 啟動而不是構建的開發環境版本,沒有 nginx,並得到了 nodejs api 錯誤 ECONNREFUSED。 但是我可以 go 到 postman 並在 localhost:8080 中正常使用 api,所以我猜這是一個 docker 容器通信問題,但不知道如何解決它

docker-compose.yml

version: "3.8"

services:
  app-server:
    build:
      context: olimpoback
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    restart: always # "no" always unless-stopped
    depends_on:
      - mysqldb
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://mysqldb:3306/Olimpo?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false
      SPRING_DATASOURCE_USERNAME: admin
      SPRING_DATASOURCE_PASSWORD: senha
    networks:
      - backend
      - frontend
    #volumes:
    #  – /data/spring-boot-app

  # Frontend Service
  app-client:
    build:
      context: olimpoFront
      dockerfile: Dockerfile.prod
      args:
        REACT_APP_API_BASE_URL: http://localhost:8080/
    ports:
      - "80:80"
    restart: always
    depends_on:
      - app-server
    networks:
      - frontend

  mysqldb:
    image: mysql:8.0.21
    container_name: mysqlDB
    command: --default-authentication-plugin=mysql_native_password
    ports:
      - "3306:3306"
    restart: always
    environment:
      - MYSQL_DATABASE=Olimpo
      - MYSQL_USER=admin
      - MYSQL_PASSWORD=senha
      - MYSQL_ROOT_PASSWORD=senha
    volumes:
      - mysql_data:/var/lib/mysql
      - ./mysql-dump:/docker-entrypoint-initdb.d
    networks:
      - backend

volumes:
  mysql_data:
    driver: local

networks:
  backend:
  frontend:

DockerFile(前端)

FROM node:14.15.1 as build

WORKDIR /app

EXPOSE 3000

ENV PATH /app/node_modules/.bin:$PATH

COPY package.json package-lock.json ./

RUN npm install --silent && npm install react-scripts@3.3.0 -g --silent

COPY . ./

ARG REACT_APP_API_BASE_URL
ENV REACT_APP_API_BASE_URL=${REACT_APP_API_BASE_URL}

RUN npm run build

FROM nginx:1.20.1

WORKDIR /usr/share/nginx/html

RUN rm /etc/nginx/conf.d/default.conf

COPY --from=build /app/build /usr/share/nginx/html
COPY ./nginx.conf /etc/nginx/conf.d/default.conf

EXPOSE 80

ENTRYPOINT ["nginx", "-g", "daemon off;"]

package.json

...
"proxy": "http://127.0.0.1:8080",
...

Docker 的localhost localhost您嘗試使用 Postman 訪問的本地主機不同。發生這種情況是因為app-serverapp-clientmysqldb是在同一網絡中運行的 3 個不同容器。 他們每個人都有自己的名字。

因此,要從容器內部訪問您的app-server ,您可以使用: http://app-server:8080

例如,查看您的數據庫 url:

jdbc:mysql://mysqldb:3306/Olimpo?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false

您可能會注意到,出於同樣的原因,您正在嘗試訪問 url mysqldb而不是localhost 您指的是數據庫 url 作為容器名稱。

你可以在這里更深入地了解

暫無
暫無

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

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