我有两个docker镜像,一个是REST服务器(flaskapp),另一个是Web服务器(web)。我正在尝试使用docker-compose运行它们。

但是,似乎 Web容器无法联系 rest容器

以下是我的docker-compose.yml文件:

version: '3'
services:
  flaskapp:
    build: ./rest_server
    restart: always
    networks:
      - docker_network
    expose:
      - 5001

  web:
    build: ./web
    restart: always
    ports:
      - 3002:3000
    depends_on:
      - flaskapp
    networks:
      - docker_network
    healthcheck:
      test: ["CMD", "curl", "-f", "http://flaskapp:5001/todos"]
networks:
  docker_network:
    driver: bridge

我的Web应用程序引用以下URL:



但是,如果我使用docker exec -it <id> /bin/bash登录到docker容器并运行以下命令,则会得到我期望的json响应。



我也可以公开我的其余服务器端口,然后将其余服务器地址更改为Web服务器中的localhost,这将解决问题,但这不是我想要的。

我不想将我的其余服务器暴露给主机。

最佳答案

你需要:

  • 为您的容器定义一个公共(public)网络
  • 公开5001容器的端口flaskapp

  • 实际上,根据documentationEXPOSE指令“公开了端口,而没有将其发布到主机上-只有链接的服务才能访问它们”。因此,它允许“暴露”端口的容器与同一网络中的其他容器之间进行通信。

    尝试这样的事情:
    version: '3'
    services:
        flaskapp:
            build: ./rest_server
            expose:
                - 5001
            networks:
                - docker_network
    
        web:
            build: ./web
            restart: always
            ports:
                - 3002:3000
            networks:
                - docker_network
            depends_on:
                - flaskapp
    
    networks:
      docker_network:
        driver: bridge
    

    关于docker - docker-compose连接到其他容器失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54411067/

    10-16 23:43