Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过“在两个seprate docker容器之间进行通信;localhost";?_Docker_Docker Compose_Docker Container - Fatal编程技术网

如何通过“在两个seprate docker容器之间进行通信;localhost";?

如何通过“在两个seprate docker容器之间进行通信;localhost";?,docker,docker-compose,docker-container,Docker,Docker Compose,Docker Container,您好,我在两个sperate docker容器之间通信时遇到问题。 一个是flask应用程序,它在端口5000上运行(端口暴露于本地,我可以通过本地主机访问此flask应用程序)http://localhost:5000/api)但是端口3000上运行着另一个react应用程序docker容器问题是我需要点击flask api,每当我试图向你提出请求时http://localhost:5000/api 从容器内部看,它不允许我这样做。 有什么帮助吗 这是react应用程序的docker comp

您好,我在两个sperate docker容器之间通信时遇到问题。 一个是flask应用程序,它在端口5000上运行(端口暴露于本地,我可以通过本地主机访问此flask应用程序)http://localhost:5000/api)但是端口3000上运行着另一个react应用程序docker容器问题是我需要点击flask api,每当我试图向你提出请求时http://localhost:5000/api 从容器内部看,它不允许我这样做。 有什么帮助吗

这是react应用程序的docker compose文件 版本:“3”

services:

  react-cms:
      tty: true 
      build: .
      ports: 
          - "8080:3000"
这是Flask应用程序的撰写文件

version: '3'

services:

  video_service:

    build: video_service/.
    
    ports: 
        - 5001:5000

如果您想访问视频服务,您需要将其包含在docker compose文件中

  react-cms:
    depends_on: 
      - video_service
    environment: 
      - VIDEO_SERVICE_URI=video_service/api

然后,您可以通过环境变量访问该服务

如果要访问视频服务,需要将其包含在docker compose文件中

  react-cms:
    depends_on: 
      - video_service
    environment: 
      - VIDEO_SERVICE_URI=video_service/api

然后,如果您在docker compose中添加了“video\u service”依赖项,而docker compose中有“react cms”,则可以通过环境变量访问该服务,这意味着该video\u service容器不再能够维持其自身的生命周期(如果您愿意的话)因为react cms的docker compose down也会关闭视频服务容器

我要做的是,运行viedoe_服务并按原样反应cms(这意味着,不同的docker组合),但将两个容器保持在同一网络上。因此,react cms可以对viedoe_服务进行api调用。请访问docker文档页面

但我的想法是

步骤1:将网络添加到viedoe_服务级别,如下所示

networks: 
      - my_react_video_service_network
networks: 
  my_react_video_service_network: 
    name: my_react_video_service_network
networks:
  default:
    external:
      name: my_react_video_service_network
然后在服务级别上声明和定义网络,如下所示

networks: 
      - my_react_video_service_network
networks: 
  my_react_video_service_network: 
    name: my_react_video_service_network
networks:
  default:
    external:
      name: my_react_video_service_network
步骤2:从react cms连接到我的react视频服务网络。添加到这样的服务级别

networks: 
      - my_react_video_service_network
networks: 
  my_react_video_service_network: 
    name: my_react_video_service_network
networks:
  default:
    external:
      name: my_react_video_service_network

因此,现在您的react服务容器与video_服务容器运行在同一网络上,因此,react服务应该能够使用video_服务api。

如果您将“video_服务”依赖项添加到docker compose,其中有“react cms”,这意味着,由于react cms的docker compose down(docker compose down for react cms)也将关闭视频服务容器,因此视频服务容器不再能够保持其自身的生命周期(如果您愿意)

我要做的是,运行viedoe_服务并按原样反应cms(这意味着,不同的docker组合),但将两个容器保持在同一网络上。因此,react cms可以对viedoe_服务进行api调用。请访问docker文档页面

但我的想法是

步骤1:将网络添加到viedoe_服务级别,如下所示

networks: 
      - my_react_video_service_network
networks: 
  my_react_video_service_network: 
    name: my_react_video_service_network
networks:
  default:
    external:
      name: my_react_video_service_network
然后在服务级别上声明和定义网络,如下所示

networks: 
      - my_react_video_service_network
networks: 
  my_react_video_service_network: 
    name: my_react_video_service_network
networks:
  default:
    external:
      name: my_react_video_service_network
步骤2:从react cms连接到我的react视频服务网络。添加到这样的服务级别

networks: 
      - my_react_video_service_network
networks: 
  my_react_video_service_network: 
    name: my_react_video_service_network
networks:
  default:
    external:
      name: my_react_video_service_network


现在,react服务容器与video_服务容器运行在同一网络上,因此,react服务应该能够使用视频服务api。

您不需要在每个容器上同时显示两个端口吗?您可以显示docker compose文件吗?@ThatGuyKev我已经用compose文件更新了问题。@AleksanderBobiński是的,我已经显示了端口。因为每个容器都有自己的命名空间,主机上的本地主机将与容器中的本地主机不同,。请尝试http://:5000/您不需要在每个容器上同时显示两个端口吗?您可以显示docker compose文件吗?@ThatGuyKev我已经用compose文件更新了问题。@AleksanderBobiński是的,我已经显示了端口。由于每个容器都有自己的命名空间,主机上的localhost将与容器内的localhost不同,. 试试http://:5000/Hi,谢谢你的回答,我会试试这个,但是,我有点困惑,视频_服务是在一个单独的容器中创建和运行的,如果我做了你说的,这不会导致任何问题吗?是的,它应该运行没有问题,但是,你可能会面临其他相关问题。从我所看到的,你们正在实施像system这样的微服务,这种方法对我来说总是有效的。无论如何,如果它不起作用,请在评论中告诉我。很抱歉,这是一个错误,我只是在你的代码中添加了几行,我会编辑它。你是说你有多个“docker compose”文件吗?当然,让我们这样做吧。谢谢你的回答,不过,我会试试这个,我很困惑,视频_服务是在一个单独的容器中创建和运行的,如果我按照你说的做,会不会导致任何问题?是的,它应该运行没有问题,但是,你可能会面临其他相关问题。从我所看到的,你们正在实施像system这样的微服务,这种方法对我来说总是有效的。无论如何,如果它不起作用,请在评论中告诉我。很抱歉,这是一个错误,我只是在代码中添加了几行,我会编辑它。你是说你有多个“docker compose”文件吗?当然,让我们这样做