我有2个应用程序在docker-compose下作为服务运行。
我正在尝试通过调用以下命令从我的React应用向Node.js服务器发出HTTP请求:
fetch("http://backend:4000/")
在GET http://backend:4000/ net::ERR_NAME_RESOLUTION_FAILED
下访问我的React应用时,我在浏览器中得到http://localhost:3000
这是我的docker-compose文件。
version: "3.7"
services:
frontend:
build:
context: ./frontend
volumes:
- ./frontend:/app
ports:
- "3000:3000"
depends_on:
- "backend"
backend:
build:
context: ./backend
volumes:
- ./backend:/app
我正在运行Ubuntu,多年来一直遇到这个问题。没有任何真正的帮助-创建网络并向其分配服务,创建链接等。
一件奇怪的事是,当我进入React应用程序容器并运行bash命令时:
ping backend
或curl http://backend:4000
,该请求实际上可以正常工作。
答案 0 :(得分:0)
version: "3.7"
services:
frontend:
build:
context: ./frontend
volumes:
- ./frontend:/app
ports:
- "3000:3000"
depends_on:
- "backend"
links:
- backend
backend:
container_name: backend
build:
context: ./backend
volumes:
- ./backend:/app
错误的选项
links:
- "backend:test"
"backend:test"
是您收到名称解析错误的原因。
那不是服务名称,backend
是。
答案 1 :(得分:0)
我的猜测是,您正在尝试通过浏览器而不是前端容器来连接后端应用程序。如果是这种情况,那么您应该像这样显示后端端口;
backend:
container_name: backend
build:
context: ./backend
volumes:
- ./backend:/app
ports: #whatever the port number
- "4000:4000"
然后,您应在React应用中将网址从http://backend:4000更改为http://localhost:4000。