docker-compose连接到其他容器失败

时间:2019-01-28 22:15:07

标签: docker docker-compose dockerfile

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

但是,网络容器似乎无法联系休息容器

以下是我的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:

  

http://flaskapp:5001/todos

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

  

卷曲http://flaskapp:5001/todos

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

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

2 个答案:

答案 0 :(得分:2)

您需要:

  1. 为您的容器定义一个通用网络
  2. 暴露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

答案 1 :(得分:1)

只需添加:

expose:
 - "5001"

至flaskapp部分。

这不会将端口5001暴露给主机,而只是将端口5001暴露给同一网络中的所有容器,这正是您想要的。