Я знаю, что многие люди задавали подобные вопросы, но ни одно из найденных мной решений не могло быть применено к моему делу. Я уверен, что решение должно быть простым, но я не могу его найти!
По сути, мне нужен доступ к определенной службе, запущенной на моей хост-машине, из док-контейнера (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-адресу, а теперь не могу больше! Я понятия не имею, что изменилось, но прежде чем я мог, а теперь я не могу больше.
- То, что я пробовал до сих пор:
- Доступ к хосту через его реальный IP, который работал в прошлом (клянусь богом, это было). Я получаю TimeoutError: [Errno 110] Тайм-аут соединения
- Доступ к 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 . И это даже хорошо, потому что это будет означать, что другие контейнеры также смогут это делать, и я не хочу, чтобы кто-нибудь мог так обращаться к серверу !!
- Addхост в дополнительных хостах (https://forums.docker.com/t/accessing-host-machine-from-within-docker-container/14248/5) - не разрешает использовать как предопределенные, так и определяемые пользователем сети одновременно ... и мне это нужно.
- Переадресация портов (возможнонаправление, но я не вижу, как это сделать в направлении контейнера -> хоста) Добавьте порт для хост-машины в докер, он работает в направлении хоста> контейнера, добавив 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