Не удается войти из (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 для более подробных объяснений.
Вам нужно будет опубликовать порт, чтобы это работало.