2016-11-18 5 views
1

Я пытаюсь разделить унаследованной системы в сочетании с HBase и модуля PHP в двух отдельных контейнерах со следующей Докер-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 

Я использую общественный hbase-docker изображение который использует порт 9090 для бережливости, в то время как мой устаревший модуль php ожидает подключения через порт 9091. Я попытался «отобразить» или «переслать» в файле docker-compose.yml «9090: 9091» без недостатка. Я также попробовал атрибут expose docker-compose, но он не принимает два порта (только один, который подвергается другим контейнерам). Как это сделать?

Я хочу, чтобы слушающий порт 9090 из Hbase контейнера будет выглядеть как 9091 из PHP контейнера (внутри)

+0

Вы пытались использовать внешние ссылки? https://docs.docker.com/compose/compose-file/ – Xenwar

+0

Отображение портов и атрибуты 'expose' эффективны только для привязки контейнера к хосту. Не для внутренних ссылок. – Selva

ответ

0

Одним из возможных решений: Создание собственного образа, с dajobe/hbase в качестве основного изображения, но изменение конфигурации и порты hbase, открытые с использованием EXPOSE в соответствии с вашими требованиями, а затем используйте это изображение в своем файле компоновки.

Но для этого вам потребуется создать и управлять изображением самостоятельно.

+0

Я не против создания изображения, но 'EXPOSE' не позволяет вам пересылать/сопоставлять порт. Мне все равно придется использовать save 9090 – ItayB

0

Решение состоит в том, чтобы поместить обе службы в одну и ту же сеть докеров.

В частности, добавить к вашей docker-compose.yml:

networks: 
    app_net: 
    driver: bridge 

Затем в конфигурации каждого сервиса обязательно включают в себя:

networks: 
    - app_net 

Наконец (и вы уже сделали это), убедитесь, что что правильное отображение портов включено в конфигурацию для hbase:

ports: 
    - "9090:9091" 
Смежные вопросы