从容器(docker)访问服务器资源

我知道很多人都提出过类似的问题,但是我发现的任何解决方案都无法应用于我的案子。我相信解决方案应该很简单,但是我找不到它!

基本上,我需要从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地址访问主机,现在我不能了!我不知道发生了什么变化,但就在我可以现在之前,现在我不能了。

  • 到目前为止我尝试过的是:
    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]连接超时。甚至还不错,因为这意味着其他容器也可以做到这一点,我不希望任何人都可以那样访问服务器!
    3. 在额外主机(https://forums.docker.com/t/accessing-host-machine-from-within-docker-container/14248/5)中添加主机-不允许同时使用预定义和用户定义的网络...,我需要它。
    4. 端口转发(也许是方向,但我在容器->主机方向上看不到该方法)将主机的端口添加到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
zsdgr89456789000zzh7 回答:从容器(docker)访问服务器资源

要连接到主机上运行的进程,请尝试在服务定义中添加network_mode: host

services:   dmz:
    container_name: testbed_dmz
    network_mode: host

但是,如果dmz运行在主机的localhost:[port_num]端口上,则dmz需要使用port_num连接到python进程

本文链接:https://www.f2er.com/3165736.html

大家都在问