2016-11-18 119 views
1

我试图遗留系统从HBase的和PHP模块组合分成两个分开的容器具有以下搬运工-撰写的文件:端口转发搬运工-组成

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 

我使用一个公共hbase-docker图像其中使用端口9090为节俭,而我的传统的PHP模块希望通过端口9091连接。我试图在docker-compose.yml文件“9090:9091”内“映射”或“转发”。我也尝试了docker-compose的expose属性,但它不需要两个端口(只有一个暴露给其他容器)。我如何做这个追加?

我想要的HBase的容器的监听端口9090将出现9091从PHP容器(内部)

+0

您是否尝试过external_links? https://docs.docker.com/compose/compose-file/ – Xenwar

+0

端口映射和'expose'属性只对容器主机绑定有效。不适用于内部链接。 – Selva

回答

0

一个可能的解决方案是:建立自己的形象,dajobe/hbase为基础的图像,但修改使用EXPOSE公开的hbase配置和端口符合您的要求,然后在撰写文件中使用该图像。

但是这需要您自己构建和管理图像。

+0

我不介意构建图像,但'EXPOSE'不允许您转发/映射端口..我仍然必须使用保存9090 – ItayB

0

解决方案是将两个服务放在同一个码头网络上。

具体来说,它添加到您的docker-compose.yml

networks: 
    app_net: 
    driver: bridge 

然后,在每个服务的配置一定要包括:

networks: 
    - app_net 

最后(你已经这样做了),可以肯定的在hbase的配置中包含正确的端口映射:

ports: 
    - "9090:9091"