我在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
我错过了什么?
谢谢!
答案 0 :(得分:0)
从我对docker的工作原理的理解:
你不应该暴露同一网络上的容器之间的通信所需的端口(在他们的“世界”中,他们应该能够在任何端口上相互通信而不暴露它)
您应该只向主机公开端口。
确保你配置tomcat在47500上运行,我相信它正在收听8080
你可以进入容器:
docker exec -it <container name> bash
netstat -tulpn