【问题标题】:port forwarding in docker-composedocker-compose 中的端口转发
【发布时间】:2016-11-18 18:18:35
【问题描述】:

我正在尝试使用以下 docker-compose 文件将结合了 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 从 php 容器(内部)显示为 9091

【问题讨论】:

标签: docker docker-compose thrift portforwarding


【解决方案1】:

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

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

【讨论】:

  • 我不介意构建映像,但EXPOSE 不允许您转发/映射端口.. 我仍然必须使用保存 9090
【解决方案2】:

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

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

networks:
  app_net:
    driver: bridge

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

networks:
  - app_net

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

ports:
  - "9090:9091"

【讨论】:

    猜你喜欢
    • 2018-08-09
    • 2021-10-14
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    • 2015-02-24
    • 2020-07-11
    • 2017-01-30
    相关资源
    最近更新 更多