[英]Access server ressource from the container (docker)
我知道很多人都问过类似的问题,但我找到的解决方案都不能应用于我的案例。 我确信解决方案应该很简单,但我真的找不到它!
基本上我需要从 docker 容器 (dmz) 访问在我的主机上运行的特定服务。 我有一个 docker 容器池和一个在真机(主机)上运行的“编排器”服务。 这家伙是一个python REST服务,运行在主机的5001端口,它负责例如保存正在运行的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 工作。 它们是 rest 服务,我什至得到了 rest 请求的答案。 3 是我现在需要做的事情,我无法做到,我不知道发生了什么,但我向上帝发誓,三周前,我可以从容器中通过其真实的 IP 地址访问主机。 现在我不能了! 我不知道发生了什么变化,但就在我之前可以,现在我不能了。
关于如何做到这一点的任何想法?!?
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
要连接到主机上运行的进程,请尝试将network_mode: host
添加到服务定义中:
services: dmz:
container_name: testbed_dmz
network_mode: host
但是然后 dmz 需要使用localhost:[port_num]
连接到 python 进程,假设它在主机的port_num
端口上运行
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.