我想使用容器名称在react(前端)容器和节点(后端)容器之间创建连接。
反应(前端)dockerfile:
> FROM node:18-alpine as builder WORKDIR /frontend-docker-example/
> EXPOSE 3000
>
> COPY package*.json /frontend-docker-example/ RUN npm install COPY
> public/ /frontend-docker-example/public
> COPY src/ /frontend-docker-example/src
> CMD ["npm", "start"]
节点(后端)dockerfile:
FROM node:18-alpine as builder
WORKDIR /backend-docker-example/
EXPOSE 5000
COPY package*.json /backend-docker-example/
RUN npm install
COPY app.js /backend-docker-example/app.js
CMD [ "npm", "start" ]
docker-compose.yaml
version: '3.1'
services:
#Frontend Service
client:
container_name: client
build:
context: ./client
ports:
- "3000:3000"
depends_on:
- server
server:
container_name: server
build:
context: ./server
反应代码:
const response = await fetch('http://server:5000/add',{ .... }
节点代码:
app.use(cors({
origin: '*'
}))
错误:
POST http://server:5000/add net::ERR_NAME_NOT_RESOLVED
两个容器与使用的 docker compose 位于同一网络中。为了确保安全,我还使用 dockerspect 检查了两个容器的 IP。还检查了 DNS 解析。
docker exec -it react-frontend sh
然后ping server
我可以成功 ping 和curl 并得到响应,但不能在本地主机上。我该如何解决这个问题?
无法在本地主机上
对于服务器 docker-compose 端口,添加以下内容:
- '127.0.0.1:5000:5000'