Не удается войти из (fluentd) logdriver, используя имя службы в compose

У меня есть следующие настройки в докере:

  • Приложение (httpd)
  • Fluentd
  • ElasticSearch
  • Kibana

Конфигурация логдрайвера приложения описывает контейнер fluentd. Журналы будут сохранены в ES и показаны в Kibana.

Когда logdriver настроен так, он работает:

web:
    image: httpd
    container_name: httpd
    ports:
      - "80:80"
    links:
      - fluentd
    logging:
      driver: "fluentd"
      options:
        fluentd-address: localhost:24224
        tag: httpd.access

А fluentd отображает свой открытый порт 24224 на порт 24224 хоста.

 fluentd:
    build: ./fluentd
    image: fluentd
    container_name: fluentd
    links:
      - "elasticsearch"
    ports:
      - "24224:24224"

Но я не хочу показывать, что я свободно владею сетью хостов. Я хочу, чтобы он был "закрытым" внутри сети докеров (я хочу только отобразить приложение и kibana в сети хоста), вот так:

 fluentd:
   build: ./fluentd
   image: fluentd
   container_name: fluentd
   links:
     - "elasticsearch"

Порт 24224 по-прежнему открыт (в файле Docker), но он не отображается в сети хоста. Теперь я хочу изменить конфигурацию logdriver моего приложения: logging: driver: "fluentd" Параметры: fluentd-адрес: fluentd: 24224 тег: httpd.access

Таким образом, fluentd - это имя контейнера fluentd, и они находятся в одной сети, но приложение не может установить с ним соединение.

failed to initialize logging driver: dial tcp: lookup fluentd

Возможно, это связано с тем, что опция ведения журнала выполняется перед опцией 'link' в файле compose?

Есть ли способ позволить этой работе?

1 ответ

Решение

Это невозможно в настоящее время. Docker deamon, который обрабатывает драйверы журналов, является процессом, запущенным на хост-компьютере. Это не услуга в вашей сети, и поэтому он не может преобразовать имена серверов в IP-адреса. Смотрите этот вопрос GitHub для более подробных объяснений.

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

Другие вопросы по тегам