我知道很多人都提出过类似的问题,但是我发现的任何解决方案都无法应用于我的案子。我相信解决方案应该很简单,但是我找不到它!
基本上,我需要从Docker容器(dmz)访问在我的主机上运行的特定服务。我有一个泊坞窗容器池和一个在真实计算机(主机)上运行的“ orchestrator”服务。这个家伙是在主机的端口5001上运行的python REST服务,它负责保存运行中的docker计算机等的执行日志。我需要一台特定的机器才能访问主机(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是我现在需要做的,而且我不man强求!我不知道发生了什么,但我向上帝发誓,三周前我从容器中可以通过主机的真实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]连接超时。甚至还不错,因为这意味着其他容器也可以做到这一点,我不希望任何人都可以那样访问服务器!
- 在额外主机(https://forums.docker.com/t/accessing-host-machine-from-within-docker-container/14248/5)中添加主机-不允许同时使用预定义和用户定义的网络...,我需要它。
- 端口转发(也许是方向,但我在容器->主机方向上看不到该方法)将主机的端口添加到docker。它在主机->容器方向上起作用,在作曲家文件的端口上添加5002:5002,但是相反是不可能的。当我启动网络时,我无法再启动我的服务了(这是合理的,因为该端口不可用)。如何使用?我的意思是在Docker上托管感?如何将端口转发指向已启动并正在运行的服务?
关于如何做到这一点的任何想法?!?!?
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