自定义网络中链接的Docker容器之间的连接被拒绝了吗?

时间:2016-06-22 11:03:01

标签: tomcat docker docker-compose

我在Docker中遇到以下情况:

在撰写文件中,我按以下方式创建自定义网络:

networks:
  my-docker-network:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.20.238.0/24
          gateway: 172.20.238.1

之后我创建了几个属于该网络的容器。它们是链接的,它们都向主机公开了相同的端口(我不想发布端口,我只想让它从主机和另一个容器访问)

  web-backend-2:
    build: ./backend-web
    hostname: web-backend-host-2
    links:
      - web-backend-1
    expose:
      - 47500
    networks:
      my-docker-network:
        aliases:
          - backend2
    container_name: web-backend-2-service


  web-backend-1:
    build: ./backend-web
    hostname: web-backend-host-1
    expose:
      - 47500
    networks:
      my-docker-network:
        aliases:
          - backend1
    container_name: web-backend-1-service

backend-web项目是一个简单的centos7容器,带有tomcat和一些特定的tomcat配置。现在,当我编写整个东西时,一切都很好,只有一个例外:我无法从端口47500上的backend1连接到backend2(反之亦然):

telnet backend1 47500
Trying 172.20.238.3...
telnet: connect to address 172.20.238.3: Connection refused

更令人费解的是,telnet在端口8080上成功,没有任何EXPOSE声明。

Docker version 1.11.2, build b9f10c9
docker-compose version 1.7.1, build 0a9ab35

我错过了什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

从我对docker的工作原理的理解:

你不应该暴露同一网络上的容器之间的通信所需的端口(在他们的“世界”中,他们应该能够在任何端口上相互通信而不暴露它)

您应该只向主机公开端口。

确保你配置tomcat在47500上运行,我相信它正在收听8080

你可以进入容器:

docker exec -it <container name> bash

netstat -tulpn