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

我正在尝试将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
    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