如何使两个运行flask服务和golang服务的docker容器彼此通信?

时间:2019-03-02 10:13:22

标签: docker go flask docker-compose docker-networking

我有一个烧瓶服务通过端口5000上的docker-compose运行。类似地,我有一个不同的go服务通过端口8000上的另一个docker-compose运行。Golang服务需要调用在5000上运行的flask API。在获取go服务以调用flask服务方面面临麻烦。我尝试添加docker-network但失败了。与单个docker-compose相比,通过不同的docker-compose运行这两种服务的优缺点是什么? (我无法在单个docker-compose,btw中成功运行它们)。 docker ps running both the containers

烧瓶Docker组成

version: '3'  # version of compose format

services:
  bidders:
    build:
      dockerfile: Dockerfile
      context: .
    volumes:
      - .:/usr/src/bidders # mount point
    ports:
      - 5000:5000  # host:container

Go Docker Compose

version: '3'

services:
  auctions:
    container_name: auctions
    build: .
    command: go run main.go
    volumes:
      - .:/go/src/auctions
    working_dir: /go/src/auctions
    ports:  
      - "8000:8000"

第三个Nwtwork Docker-compose.yml

#docker-compose.yml
version: '3'

networks:
    - second_network

networks:
  second_network:
    driver: bridge

1 个答案:

答案 0 :(得分:1)

使用单个docker-compose.yml,可以使两个服务都在同一网络内变得更加容易。那么,您在执行此操作时遇到了什么问题?还要确保您的flask and go应用程序都从代码本身而不是0.0.0.0绑定到127.0.0.1,以便您可以从容器外部访问它们。

有了两个docker-compose.yml,您有两个选择:

  • 通过这些文件之一创建网络,并使另一个文件中的另一个容器加入该外部网络。

  • 使用docker network create创建网络,并在两个文件中为您的容器定义一个外部网络

还有一个类似的问题,您可以从here中查看包含示例的答案

您可以检查Networking in Compose以获得更多信息