Docker 网络服务无法相互连接

问题描述 投票:0回答:1

我有这个 docker compose 文件显示的文件

version: '3'

services:
  backend-flask:
    build: ./backend   

  frontend-fligh:
    build: ./frontend-fligh
    ports:
      - "3000:3000"
    depends_on:
      - backend-flask

在我的前端中,我尝试通过以下方式进行后端 api 调用

const response = await fetch('http://backend-flask:5000/search', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json'
                    },
                    body: JSON.stringify(query)
                });

但是这个请求给我返回了这个错误 POST http://backend-flask:5000/search net::ERR_NAME_NOT_RESOLVED

在我的后端 Flask 应用程序的 app.py 中,也定义了路由

app = Flask(__name__)
CORS(app) #for production change to have only my site


@app.route('/search', methods=['POST'])
//more code

另请注意,如果我将其从 backend-flask 更改为 localhost:5000/search ,这会起作用

我检查了网络,容器都在同一个网络中,我真的迷失了方向,不知道为什么它不起作用

jasonwang@Jasons-MacBook-Pro startUp % docker network inspect startup_default
[
    {
        "Name": "startup_default",
        "Id": "f9507df9f26968c4665da09bf90b24904267b177476c3654197d4b9afbf1dd78",
        "Created": "2023-08-25T02:26:45.523880875Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.19.0.0/16",
                    "Gateway": "172.19.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "1278a785f11c2227638d12aba3c5286a29346134801b43481fcedc5d15037b12": {
                "Name": "startup-redis-1",
                "EndpointID": "cfaf2be033ce04fd9f7cdd5cba4d287d0d3a9ee77edd79324fe8b6dfd2a93ca6",
                "MacAddress": "02:42:ac:13:00:02",
                "IPv4Address": "172.19.0.2/16",
                "IPv6Address": ""
            },
            "5ca87c376d0342d67e07a2452f2ae188af710c65753894fdddda99bb05e0e902": {
                "Name": "startup-backend-flask-1",
                "EndpointID": "24bd57249b98e595b54846d5581655798730b3eb475624fe057599ad1f492b5c",
                "MacAddress": "02:42:ac:13:00:03",
                "IPv4Address": "172.19.0.3/16",
                "IPv6Address": ""
            },
            "6a968c8e2bad884cc56540cc43699dc51c479486693e60209add3e890e84d94c": {
                "Name": "startup-frontend-fligh-1",
                "EndpointID": "36598650abb0c25cde0da3442f587771a947f1c8b119f5455834b0d699fa82e1",
                "MacAddress": "02:42:ac:13:00:04",
                "IPv4Address": "172.19.0.4/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "default",
            "com.docker.compose.project": "startup",
            "com.docker.compose.version": "2.20.2"
        }
    }
]

docker ps如下所示

    CONTAINER ID   IMAGE                  COMMAND                  CREATED       STATUS          PORTS                                       NAMES
ec952f0dd6fe   fligh-frontend-fligh   "docker-entrypoint.s…"   2 hours ago   Up 58 seconds   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp   fligh-frontend-fligh-1
55aba3e48d6b   fligh-backend-flask    "flask run"              2 hours ago   Up 58 seconds   0.0.0.0:8000->5000/tcp, :::8000->5000/tcp   fligh-backend-flask-1
433bb688fc71   redis:alpine           "docker-entrypoint.s…"   3 hours ago   Up 58 seconds   6379/tcp                                    fligh-redis-1
docker docker-compose docker-machine
1个回答
0
投票

根据

docker compose ps
命令的输出,您的后端正在侦听端口
8000
,您已在端口
5000
上转发到主机。所以你必须使用
http://backend-flask:8000
http://localhost:5000

© www.soinside.com 2019 - 2024. All rights reserved.