[英]How to configure port of React app fetch when deploying to ECS fargate cluster with two tasks
我有兩個 docker 圖像在本地部署時可以正常通信,但我不確定如何設置我的應用程序以在它們都部署為同一個 ECS 集群上的任務。
我的 React 應用程序使用簡單的fetch('/fooService/' + barStr)
類型調用,而我的其他應用程序在端口 8081 上公開了一個/fooService/{barStr}
端點。
對於本地部署和本地docker,我使用setupProxy.js指定代理:
const { createProxyMiddleware } = require("http-proxy-middleware");
module.exports = function(app) {
app.use(createProxyMiddleware('/fooService',
{ target: 'http://fooImage:8081',
changeOrigin: true
}
));
}
不過,在 ECS 中,這似乎什么都不做。 我看到 setupProxy 在圖像啟動時運行,但來自我的 React 應用程序的請求只是 go 直接到 {sameIPaddress}/fooService/{barStr},完全忽略了代理規范。 我可以在瀏覽器中看到請求是通過端口 80 發出的。如果這些請求是在端口 8081 上手動發出的,它們會很好地完成,因此端口可用並且服務正在運行。
我已經在另一個任務上公開了端口 8081,我可以毫無問題地從外部訪問它,我只是不清楚如何設計我的 React 應用程序以指向它,因為我不一定知道我將使用的 IP 地址分配直到任務啟動。 如果我使用相對路徑,則無法指定端口。
在此上下文中指定我的提取請求的目的地的慣用方法是什么?
編輯:如果相關,這里是 docker 圖像的配置方式。 它們是在 dockerhub 上自動構建的,如果我將它們部署在我的本地 docker 實例中,它們可以正常工作。
docker-compose.yaml
version: "3.8"
services:
fooImage:
image: myname/foo-image:0.1
build: ./
container_name: server
ports:
- '8081:8081'
barImage:
image: myname/bar-image:0.1
build: ./bar
container_name: front
ports:
- '80:80'
stdin_open: true
tty: true
Dockerfile - 富圖像
#
# Build stage
#
FROM maven:3.8.5-openjdk-18-slim AS build
COPY src /home/app/src
COPY pom.xml /home/app
RUN mvn -f /home/app/pom.xml clean package
FROM openjdk:18-alpine
COPY --from=build /home/app/target/*.jar /usr/local/lib/app.jar
EXPOSE 8081
ENTRYPOINT ["java", "-jar", "/usr/local/lib/app.jar"]
Dockerfile - 條形圖
FROM node:17-alpine
WORKDIR /app
COPY package.json ./
COPY package-lock.json ./
RUN npm install
COPY . .
CMD ["npm", "start"]
此問題的解決方案是將代理目標返回到“localhost:8081”。 根據亞馬遜支持:
為了最快地解決您的問題,您可以嘗試將代理配置從“http://server:8081”更改為“http://localhost:8081”,代理應該可以工作。
這是因為當 Fargate 與 awsvpc.network 模式一起使用時,在任務中運行的容器共享相同的 .network 命名空間,這意味着容器可以通過本地主機相互通信。 (例如,當后端容器在端口 8081 監聽時,前端容器可以通過 localhost:8081 訪問后端容器)並且當使用 docker-compose [2] 時,您可以使用主機名與同一 docker-compose 中指定的另一個容器通信文件。 因此,在 Fargate 中使用“http://server:8081”代理后端流量將不起作用,應修改為“http://localhost:8081”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.