Docker网络无法正常工作

时间:2018-07-26 21:19:51

标签: docker networking docker-compose

我在Ubuntu Linux 16.04上使用Docker版本18.03.1-ce运行Docker容器。在这台特定的计算机上,与在Ubuntu 18.04上的Docker 17.12.1-ce笔记本上的安装相比,我注意到了行为上的差异。 当我启动相同的docker-compose部署,该部署在使用docker v18的主机上的docker v17本地无问题运行时,我无法访问我的暴露端口和转发端口。

部署由2个容器组成,这些容器在后端网络上进行通信。其中一个容器还暴露了一个Web端口(在4000上),我希望可以从外部对其进行访问。我认为这是一个相当普通的设置。

在v18安装中,我需要显式运行docker network connect bridge <containername>才能访问我的公开端口。这会将我的容器与暴露的端口连接到默认的网桥网络,然后才可以访问端口4000。

我注意到的另一个区别是,在v17安装中,我可以ping后端网络中的ip地址,例如ping 172.20.0.2可以正常工作。在v18安装上,此操作无效。我只能ping桥接网络上的主机。

在阅读了许多文档之后,我不太确定这实际上是所需的行为,因为隔离后端网络实际上是一个功能。

另一方面,我还没有找到自动将容器连接到网桥网络和后端网络的方法。实现这一目标的docker-compose语法是什么?

撰写文件如下:

version: '3'
services:
  mqttweb:
    restart: always
    container_name: mqttsock
    image: mqsocksrv
    depends_on:
    - rabbitmq
    build:
      context: .
    ports:
    - "4000:4000"
    - "4001:4001"
    networks:
    - backend
    volumes:
    - logs:/root/.pm2/logs/

  rabbitmq:
    restart: always
    container_name: rabbitmq
    image: mqttweb_rabbit
    build:
      context: .
      dockerfile: Dockerfile.rabbitmq
    hostname: rabbitmq
    environment:
    - RABBITMQ_DEFAULT_USER=rabbit
    - RABBITMQ_DEFAULT_PASS=secret
    networks:
    - backend
networks:
  backend:
    driver: bridge
volumes:
  logs:

0 个答案:

没有答案