Docker网络未按预期工作

Docker网络未按预期工作,docker,networking,docker-compose,Docker,Networking,Docker Compose,我在Ubuntu Linux 16.04上使用Docker版本18.03.1-ce来运行Docker容器。在这台特定的机器上,与我在笔记本电脑上安装的Ubuntu 18.04上的Docker 17.12.1-ce不同,我注意到行为上的差异。 当我在docker v18主机上的docker v17上启动相同的docker compose部署并在本地运行时没有问题时,我无法访问暴露的和转发的端口 部署由2个在后端网络上通信的容器组成。其中一个容器还公开了一个web端口(在4000上),我希望可以从外

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

部署由2个在后端网络上通信的容器组成。其中一个容器还公开了一个web端口(在4000上),我希望可以从外部访问该端口。我认为这是一个相当普遍的设置

在v18安装上,我需要显式运行
docker-network-connect-bridge
,才能访问我的公开端口。这将我的容器与公开端口连接到默认网桥网络,只有这样我才能访问端口4000

我注意到的另一个区别是,在v17安装中,我可以在后端网络中ping ip地址,例如ping172.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:

主机是否安装了IPV并启用了ip转发?我不知道IPV,ip转发已启用。你可以发布你的撰写文件吗?我将其放在帖子中。。