Доступ к ресурсам сервера из контейнера (докер) - PullRequest
0 голосов
/ 04 ноября 2019

Я знаю, что многие люди задавали подобные вопросы, но ни одно из найденных мной решений не могло быть применено к моему делу. Я уверен, что решение должно быть простым, но я не могу его найти!

По сути, мне нужен доступ к определенной службе, запущенной на моей хост-машине, из док-контейнера (dmz). У меня есть пул Docker-контейнеров и служба «оркестровщик», которая работает на реальной машине (хосте). Этот парень является службой REST python, работающей на порте 5001 хоста, и он отвечает, например, за сохранение журналов выполнения работающих докеров, среди прочего. Мне нужна одна конкретная машина для доступа к хосту (dmz), но не остальные! Если им нужно поговорить с хостом, им нужно пройти через dmz.

 ======================================================================
 |1-  HOST  -> 5002:5002   dmz(dockerContainer):5002/service1         |
 |2-  dmz(container)     <--> 9200:9200 elasticsearch(container):9200 |
 |3-  HOST:5002/service2  <- 5001:5001   dmz(dockerContainer)         |     
 ======================================================================

Соединения 1 и 2 работают. Они являются службами отдыха, и я получаю даже ответ на запрос отдыха. 3 - это то, что мне нужно сделать сейчас, и я не могу! Я не знаю, что случилось, но клянусь богом, три недели назад из контейнеров я мог получить доступ к хосту по его реальному IP-адресу, а теперь не могу больше! Я понятия не имею, что изменилось, но прежде чем я мог, а теперь я не могу больше.

  • То, что я пробовал до сих пор:
    1. Доступ к хосту через его реальный IP, который работал в прошлом (клянусь богом, это было). Я получаю TimeoutError: [Errno 110] Тайм-аут соединения
    2. Доступ к Docker0 172.17.0.1 (https://nickjanetakis.com/blog/docker-tip-65-get-your-docker-hosts-ip-address-from-in-a-container). То же TimeoutError: [Errno 110] Время соединенияout . И это даже хорошо, потому что это будет означать, что другие контейнеры также смогут это делать, и я не хочу, чтобы кто-нибудь мог так обращаться к серверу !!
    3. Addхост в дополнительных хостах (https://forums.docker.com/t/accessing-host-machine-from-within-docker-container/14248/5) - не разрешает использовать как предопределенные, так и определяемые пользователем сети одновременно ... и мне это нужно.
    4. Переадресация портов (возможнонаправление, но я не вижу, как это сделать в направлении контейнера -> хоста) Добавьте порт для хост-машины в докер, он работает в направлении хоста> контейнера, добавив 5002: 5002 в портфайл composer, но oposit это невозможно. Когда я запускаю сеть, я больше не могу поднять свой сервис (это разумно, поскольку порт недоступен). Как это использовать? Я имею в виду на докере для хостингасмысл? Как я мог указатьпереадресация портов на работающий сервис?

Есть идеи, как это сделать?!?!?

OS Version/build : Ubuntu 16.04
Docker version : 19.03.2, build 6a30dfc
Docker-compose version : 1.24.0, build 0aa59064

Файл композитора:

version: '3.5'

services:   
  dmz:
    container_name: testbed_dmz
    # 1 - DMZ image name  
    image: testbed_dmz:latest
    ports:
        # 2 - DMZ ports 
      - "5002:5002"
    networks:
      data_network:
        # 3 - DMZ ip address  
        ipv4_address: 192.168.7.2   
  elasticsearch:
    container_name: data_server
    # 4 - Elasticsearch image name  
    image: docker.elastic.co/elasticsearch/elasticsearch:7.0.0
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - discovery.type=single-node
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    ports:
      - "9200:9200"
    networks:
      data_network:
        # 5 elasticsearch ip address
        ipv4_address: 192.168.7.3  
  kibana:
    container_name: testbed_kibana
    # 6 kibana image name
    image: docker.elastic.co/kibana/kibana:7.0.0
    environment:
        # 7 again the elasticsearch ip address
      - SERVER_NAME=192.168.7.3
    ports:
      - "5601:5601" networks:
      data_network:
        # 8 kibana ip address
        ipv4_address: 192.168.7.4   
networks:
    data_network:
        # 9 the name of the network
        name: DMZ_DATA_NET
        driver: bridge
        ipam:
            driver: default
            config:
                # 10 the network address
                - subnet: 192.168.7.0/29

1 Ответ

0 голосов
/ 04 ноября 2019

Чтобы подключиться к процессу, запущенному на хосте, попробуйте добавить network_mode: host к определению службы:

services:   dmz:
    container_name: testbed_dmz
    network_mode: host

Но тогда dmz потребуется подключиться к процессу python, используя localhost:[port_num], предполагая, что он работает наport_num порт хоста

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...