Я хочу запустить Filebeat в качестве контейнера Docker в Azure IoT Edge. Я бы хотел, чтобы Filebeat получал журналы от других, работающих с контейнерами.
Я уже могу запустить filebeat как контейнер Docker из документации (https://www.elastic.co/guide/en/beats/filebeat/6.8/running-on-docker.html#_volume_mounted_configuration)
docker run -d \
--name=filebeat \
--user=root \
--volume="$(pwd)/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro" \
--volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" \
--volume="/var/run/docker.sock:/var/run/docker.sock:ro" \
docker.elastic.co/beats/filebeat:6.8.3 filebeat -e -strict.perms=false
С помощью этой команды и с правильным filebeat.yml
файлом я могу собирать журналы для всех запущенных контейнеров на моем устройстве.
Теперь я хотел бы развернуть эту конфигурацию как модули Azure IoT Edge.
Я создал образ докера с файлом filebeat.yml
, включенным в следующий файл Docker:
FROM docker.elastic.co/beats/filebeat:6.8.3
COPY filebeat.yml /usr/share/filebeat/filebeat.yml
USER root
RUN chmod go-w /usr/share/filebeat/filebeat.yml
RUN chown root:filebeat /usr/share/filebeat/filebeat.yml
USER filebeat
Из документации: https://www.elastic.co/guide/en/beats/filebeat/6.8/running-on-docker.html#_custom_image_configuration.
Я протестировал этот Dockerfile, запустив локально
docker build -t filebeat .
а также
docker run -d \
--name=filebeat \
--user=root \
--volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" \
--volume="/var/run/docker.sock:/var/run/docker.sock:ro" \
filebeat:latest filebeat -e -strict.perms=false
Это нормально работает, журналы из других контейнеров собираются должным образом.
Теперь мой вопрос:
- Как в Azure IoT Edge смонтировать тома для доступа к другим контейнерам Docker, запущенным на устройствах, как это делается с помощью
--volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" \
--volume="/var/run/docker.sock:/var/run/docker.sock:ro"
для того, чтобы собирать логи?
Из этого другого сообщения SO (Путь подключения к модулю Azure IoT Edge) на портале Azure IoT Edge я попробовал следующее:
"HostConfig": {
"Mounts": [
{
"Target": "/var/lib/docker/containers",
"Source": "/var/lib/docker/containers",
"Type": "volume",
"ReadOnly: true
},
{
"Target": "/var/run/docker.sock",
"Source": "/var/run/docker.sock",
"Type": "volume",
"ReadOnly: true
}
]
}
}
Но когда я развертываю этот модуль, у меня возникает следующая ошибка:
2019-11-25T10:09:41Z [WARN] - Could not create module FilebeatAgent
2019-11-25T10:09:41Z [WARN] - caused by: create /var/lib/docker/containers: "/var/lib/docker/containers" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intended to pass a host directory, use absolute path
Я не понимаю эту ошибку. Как я могу указать путь, используя только [a-zA-Z0-9][a-zA-Z0-9_.-]
?
Спасибо за вашу помощь.
ИЗМЕНИТЬ
На портале Azure IoT Edge createOptions json:
{
"HostConfig": {
"Binds": [
"/var/lib/docker/containers:/var/lib/docker/containers",
"/var/run/docker.sock:/var/run/docker.sock"
]
}
}