Не удается получить доступ к хост-машине из док-контейнера - PullRequest
0 голосов
/ 27 февраля 2019

Использование докера версии 18.09.2.Использование docker в Windows 10.

Настройка стека prometheus и grafana для мониторинга показателей в службе, работающей на моем локальном хосте.Вот мой файл для создания докера.

version: '3.4'

networks:
  monitor-net:
    driver: bridge
  dockernet:
    external: true

volumes:
    prometheus_data: {}
    grafana_data: {}

services:

  prometheus:
    image: prom/prometheus:v2.7.1
    container_name: prometheus
    volumes:
      - ./prometheus/:/etc/prometheus/
      - prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.console.libraries=/etc/prometheus/console_libraries'
      - '--web.console.templates=/etc/prometheus/consoles'
      - '--storage.tsdb.retention.time=200h'
      - '--web.enable-lifecycle'
    restart: unless-stopped
    expose:
      - 9090
    networks:
      - monitor-net
      - dockernet
    extra_hosts:
      - "localhost1:10.0.75.1"
    labels:
      org.label-schema.group: "monitoring"


  grafana:
    image: grafana/grafana:5.4.3
    container_name: grafana
    volumes:
      - grafana_data:/var/lib/grafana
      - ./grafana/datasources:/etc/grafana/datasources
      - ./grafana/dashboards:/etc/grafana/dashboards
      - ./grafana/setup.sh:/setup.sh
    entrypoint: /setup.sh
    environment:
      - GF_SECURITY_ADMIN_USER=${ADMIN_USER:-admin}
      - GF_SECURITY_ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin}
      - GF_USERS_ALLOW_SIGN_UP=false
    restart: unless-stopped
    expose:
      - 3000
    networks:
      - monitor-net
      - dockernet
    labels:
      org.label-schema.group: "monitoring"

  caddy:
    image: stefanprodan/caddy
    container_name: caddy
    ports:
      - "3000:3000"
      - "9090:9090"
      - "9093:9093"
      - "9091:9091"
    volumes:
      - ./caddy/:/etc/caddy/
    environment:
      - ADMIN_USER=${ADMIN_USER:-admin}
      - ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin}
    restart: unless-stopped
    networks:
      - monitor-net
      - dockernet
    labels:
      org.label-schema.group: "monitoring"

Вот мой файл prometheus.yml.

global:
  scrape_interval:     15s
  evaluation_interval: 15s

  # Attach these labels to any time series or alerts when communicating with
  # external systems (federation, remote storage, Alertmanager).
  external_labels:
      monitor: 'docker-host-alpha'

# Load and evaluate rules in this file every 'evaluation_interval' seconds.
rule_files:
  - "alert.rules"

# A scrape configuration containing exactly one endpoint to scrape.
scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 10s
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'myapp'
    scrape_interval: 10s 
    metrics_path: /metrics
    static_configs:
      - targets: ['docker.for.win.localhost:32771']

  - job_name: 'myapp1'
    scrape_interval: 10s 
    metrics_path: /metrics
    static_configs:
      - targets: ['docker.for.win.host.internal:51626']

  - job_name: 'myapp2'
    scrape_interval: 10s 
    metrics_path: /metrics
    static_configs:
      - targets: ['docker.for.win.host.internal.localhost:51626']

  - job_name: 'myapp3'
    scrape_interval: 10s 
    metrics_path: /metrics
    static_configs:
      - targets: ['docker.for.win.host.localhost:51626']

  - job_name: 'myapp4'
    scrape_interval: 10s 
    metrics_path: /metrics
    static_configs:
      - targets: ['docker.for.win.localhost:51626']

  - job_name: 'myapp5'
    scrape_interval: 10s 
    metrics_path: /metrics
    static_configs:
      - targets: ['host.docker.internal:51626']

  - job_name: 'myapp6'
    scrape_interval: 10s 
    metrics_path: /metrics
    static_configs:
      - targets: ['host.docker.internal.localhost:51626']

  - job_name: 'myapp7'
    scrape_interval: 10s 
    metrics_path: /metrics
    static_configs:
      - targets: ['docker.for.win.localhost:51626']

  - job_name: 'myapp8'
    scrape_interval: 10s 
    metrics_path: /metrics
    static_configs:
      - targets: ['127.0.0.1:51626']

  - job_name: 'myapp9'
    scrape_interval: 10s 
    metrics_path: /metrics
    static_configs:
      - targets: ['localhost:51626']

  - job_name: 'myapp10'
    scrape_interval: 10s 
    metrics_path: /metrics
    static_configs:
      - targets: ['10.0.75.1:51626']

  - job_name: 'myapp12'
    scrape_interval: 10s 
    metrics_path: /metrics
    static_configs:
      - targets: ['localhost1:51626']

Насколько я понимаю, host.docker.internal должен ссылаться на мой IP-адрес хоста и давать мне доступ к моему локальному приложению, но это не так.Затем я посмотрел IP-адрес своего докера NAT с помощью ipconfig (адрес 10.0.75.1), и это тоже не сработало.

Затем я попробовал привязку сети localhost1 к 10.0.75.1.Я попытался настроить мостовую сеть под названием dockernet и подключиться таким образом, но это не сработало.Когда я запускаю свое приложение в док-контейнере, я могу получить к нему доступ через «docker.for.win.localhost: 32771», но этот контейнер не может получить доступ к моей удаленной базе данных, поэтому мне нужно, чтобы он работал локально.Прометей дает следующие ответы на некоторые из соответствующих адресов:

Endpoint: Error
http://docker.for.win.localhost:32771/metrics:     UP
http://host.docker.internal:51626/metrics:     server returned HTTP status 400 Bad Request
http://docker.for.win.localhost:51626/metrics:     server returned HTTP status 400 Bad Request
http://host.docker.internal.localhost:51626/metrics:     Get http://host.docker.internal.localhost:51626/metrics: dial tcp: lookup host.docker.internal.localhost on 127.0.0.11:53: no such host
http://docker.for.win.host.internal.localhost:51626/metrics:     Get http://docker.for.win.host.internal.localhost:51626/metrics: dial tcp: lookup docker.for.win.host.internal.localhost on 127.0.0.11:53: no such host

Я перепробовал все и у меня нет идей.Кто-нибудь может пролить свет?

Ответы [ 2 ]

0 голосов
/ 13 апреля 2019

Вы также можете проверить, блокирует ли ваш брандмауэр Windows 10.

Чтобы полностью отключить брандмауэр:

netsh advfirewall set allprofiles state off

Чтобы разрешить подключение через определенный порт:

New-NetFirewallRule -Protocol TCP -LocalPort 44369 -Direction Inbound -Action Allow -DisplayName "Allow network TCP on port 44369"
0 голосов
/ 20 марта 2019

У меня похожая проблема.Я локально запускаю свое собственное приложение на IIS Express через порт 52562, и prometheus внутри контейнера показывает, что http://docker.for.win.localhost:52562/metrics возвращает запрос 400 BAD.Проблема заключалась в том, что IIS Express прослушивал только localhost, поэтому я редактировал привязки в моем applicationhost.config из

<binding protocol="http" bindingInformation="*:52562:localhost" />

в

<binding protocol="http" bindingInformation="*:52562:" />

и перезапускал IIS Express.

Это решило проблему.

...