在同一Docker网络中发出HTTP请求

在同一Docker网络中发出HTTP请求,docker,docker-compose,Docker,Docker Compose,根据我的docker compose,我有一些服务在不同的docker容器中运行: version: '3' services: rest: build: context: './service/' image: persian_rest:latest container_name: persian_rest ports: - 8080:8080 networks: - persian_net volumes

根据我的docker compose,我有一些服务在不同的docker容器中运行:

version: '3'
services:
  rest:
    build:
      context: './service/'
    image: persian_rest:latest
    container_name: persian_rest
    ports:
      - 8080:8080
    networks:
      - persian_net
    volumes:
      - persian_volume:/data
  scheduler:
    build:
      context: './scheduler/'
    image: persian_scheduler:latest
    container_name: persian_scheduler
    networks:
      - persian_net
  ui:
    build:
      context: './ui/'
    image: persian_ui:latest
    container_name: persian_ui
    ports:
      - 5000:5000
    networks:
      - persian_net
  database:
    image: 'mongo:latest'
    container_name: 'persian_database'
    networks:
      - persian_net
    environment:
      - MONGO_INITDB_ROOT_USERNAME=persian_admin
      - MONGO_INITDB_ROOT_PASSWORD=123456
    ports:
      - 27017:27017
    volumes:
      - persian_volume:/data
volumes:
  persian_volume:
networks:
  persian_net:
    driver: bridge
我让我的UI persian_UI服务向REST服务persian_REST发出HTTP请求。我想既然他们在同一个网络中,我只需要向他们发出请求

但是,当我发出该请求时,它无法找到该资源:


有人知道为什么我的容器被同一个网络连接后不能执行请求吗?

目前您正在查看localhost:5000的网页。您从服务器localhost:5000请求了该网页,该服务器遵从并向您发送了一个网页,该网页现在位于您的计算机上

如果您现在希望访问与网页位于同一服务器上的API,可以向localhost发出另一个请求,但这次是端口8080。localhost:8080/api


浏览器中的网页位于客户端,您为容器指定的名称仅供服务器内部参考。从服务器外部看,当前引用是localhost。

当前您正在查看localhost:5000的网页。您从服务器localhost:5000请求了该网页,该服务器遵从并向您发送了一个网页,该网页现在位于您的计算机上

如果您现在希望访问与网页位于同一服务器上的API,可以向localhost发出另一个请求,但这次是端口8080。localhost:8080/api



浏览器中的网页位于客户端,您为容器指定的名称仅供服务器内部参考。从服务器外部看,当前引用是localhost。

我不确定,但我希望使用persian\u net:8080@SydneyY这就是我用的你的问题说你用的是波斯语rest,不是波斯语net,你确定吗?而且,该错误看起来像是chrome错误。你在URL栏中键入什么来查看你的UI?@SydneyY,这样它就不会是波斯语了?我通过localhost:5000访问UI。此外,使用波斯语网络访问也不起作用。GET net::ERR_NAME\u NOT_Resolved我不确定,但我希望使用波斯语网络:8080@SydneyY这就是我用的你的问题说你用的是波斯语rest,不是波斯语net,你确定吗?而且,该错误看起来像是chrome错误。你在URL栏中键入什么来查看你的UI?@SydneyY,这样它就不会是波斯语了?我通过localhost:5000访问UI。此外,使用波斯语网络访问也不起作用。GET net::ERR_NAME_NOT_Resolved如果我使用localhost,我不会使用波斯语网络。我将向我的机器发出请求,然后机器将映射到docker容器,对吗?我可以直接把它映射到docker容器吗?不,你不能。您在机器外部,因此必须向机器发出请求。我知道这可能看起来像localhost:5000表示您在机器中,但这只是对机器的一次性请求。实际上,如果localhost:5000是一个能够发出自己http请求的web服务器,您可以向localhost:5000发出请求。现在您请求localhost:5000/index.html,它将发送html。如果发送localhost:5000/api,docker ui会在内部发出http请求,并将结果发送回浏览器。但这取决于你的容器中实际运行的是什么,我理解。如果我是从persian_rest服务访问数据库呢。我也会使用吗mongodb://localhost... 或mongodb://persian_database...?I事实上,我不确定。它可以是localhost或persis_net。localhost,因为这一次它们在同一台机器上运行,或者persian_net,因为Docker将网络命名为persian_net。如果我使用localhost,我不会通过persian_net。我将向我的机器发出请求,然后机器将映射到docker容器,对吗?我可以直接把它映射到docker容器吗?不,你不能。您在机器外部,因此必须向机器发出请求。我知道这可能看起来像localhost:5000表示您在机器中,但这只是对机器的一次性请求。实际上,如果localhost:5000是一个能够发出自己http请求的web服务器,您可以向localhost:5000发出请求。现在您请求localhost:5000/index.html,它将发送html。如果发送localhost:5000/api,docker ui会在内部发出http请求,并将结果发送回浏览器。但这取决于你的容器中实际运行的是什么,我理解。如果我是从persian_rest服务访问数据库呢。我也会使用吗mongodb://localhost... 或mongodb://persian_database...?I事实上,我不确定。它可以是localhost或persis_net。localhost,因为这一次它们在同一台机器上运行,或者persian_net,因为Docker将网络命名为persian_net。