docker compose中的端口转发
我正在尝试将hbase和php模块组合的遗留系统拆分为两个单独的容器,其中包含以下docker compose文件:docker compose中的端口转发,docker,docker-compose,thrift,portforwarding,Docker,Docker Compose,Thrift,Portforwarding,我正在尝试将hbase和php模块组合的遗留系统拆分为两个单独的容器,其中包含以下docker compose文件: version: '2' services: php: image: my-legacy-php volumes: - ~/workspace/php:/workspace/php ports: - "80:80" links: - hbase hbase: image: dajobe/hbase
version: '2'
services:
php:
image: my-legacy-php
volumes:
- ~/workspace/php:/workspace/php
ports:
- "80:80"
links:
- hbase
hbase:
image: dajobe/hbase
hostname: hbase-docker
ports:
- "43590-44000:43590-44000"
- "8085:8085"
- "2181:2181"
- "8080:8080"
- "16010:16010"
- "9095:9095"
- "9090:9091"
- "16020:16020"
- "16030:16030"
- "60000:60000"
volumes:
- ~/workspace/hbase-docker/data:/data
我使用的是一个公共映像,它使用端口9090进行保存,而我的遗留php模块希望通过端口9091进行连接。我试图在docker compose.yml
文件“9090:9091”中“映射”或“转发”,但没有缺少。我还尝试了docker compose的expose
属性,但它不需要两个端口(只有一个端口向其他容器公开)。我该怎么做
我希望hbase容器的侦听端口9090在php容器(内部)中显示为9091。可能的解决方案之一是:构建您自己的映像,使用
dajobe/hbase
作为基本映像,但使用EXPOSE
修改hbase配置和暴露的端口以符合您的要求,然后在撰写文件中使用该图像
但这需要您自己构建和管理映像。解决方案是将两个服务放在同一个docker网络上 具体来说,将其添加到您的
docker compose.yml
:
networks:
app_net:
driver: bridge
然后,在每个服务的配置中,确保包括:
networks:
- app_net
最后(您已经这样做了),请确保hbase的配置中包含正确的端口映射:
ports:
- "9090:9091"
你尝试过外部链接吗?端口映射和
expose
属性仅对容器到主机绑定有效。不适用于内部链接。我不介意构建映像,但是EXPOSE
不允许您转发/映射端口。。我还得用save 9090