#docker #prometheus
#docker #prometheus
Вопрос:
Я пытаюсь создать образ docker soundcloud / ipmi-exporter для запуска с Prometheus на Ubuntu Bionic с помощью Docker 19.03.6, сборка 369ce74a3c. Docker на моем ноутбуке OS X — это Docker версии 20.10.2, сборка 2291f61. Я вынужден создать (настроенный) образ на своем ноутбуке, потому что у Bionic есть версия golang, которая старше, чем требуется ipmi-exporter, и мне не разрешено обновлять сервер Ubuntu.
В любом случае, может кто-нибудь сказать мне, что я делаю не так в моем Dockerfile?
# Container image
FROM quay.io/prometheus/golang-builder:1.13-base AS builder
ADD . /go/src/github.com/soundcloud/ipmi_exporter/
RUN cd /go/src/github.com/soundcloud/ipmi_exporter amp;amp; make
# Container image
FROM ubuntu:18.04
WORKDIR /
RUN apt-get update amp;amp; apt-get install freeipmi-tools -y --no-install-recommends amp;amp; rm -rf /var/lib/apt/lists/*
COPY --from=builder /go/src/github.com/soundcloud/ipmi_exporter/ipmi_exporter /bin/ipmi_exporter
EXPOSE 8888
ENTRYPOINT ["ipmi_exporter"]
CMD ["--config.file", "/ipmi_remote.yml"]
CMD ["--web.listen-address=":8889"" "--freeipmi.path=/etc/freeipmi" "--log.level="debug""]
Когда я запускаю изображение, все, что я вижу, это
ipmi_exporter: error: unexpected /bin/sh, try --help
У меня ipmi_exporter запущен непосредственно в ОС, и я никогда не настраивал config.yml. О каком config.yml говорит автор файла Dockerfile? Это упоминается в последней строке https://github.com/soundcloud/ipmi_exporter/blob/master/Dockerfile
Изображение находится здесь: https://github.com/soundcloud/ipmi_exporter Пример / пример Dockerfile ссылается на файл config.yaml, который это программное обеспечение не использует.
Я просто не могу понять, как заставить изображение извлекаться из указанного мной файла конфигурации.
Комментарии:
1. У вас есть два
CMD
s; первый игнорируется. Второй не является допустимым массивом JSON, поэтому Docker оборачивает егоsh -c '["--web.listen-address...""]'
. Затем это передается в качестве дополнительных аргументов для singleENTRYPOINT
. Возможно, было бы проще просто написать одинCMD ipmi_exporter --web.listen-address=:8889 ...
(безENTRYPOINT
синтаксиса JSON-массива и без него).2. Распространяемый файл Dockerfile содержит строку CMD [«—config.file», «/config.yml»], но с этим изображением не распространяется файл config.yml. Кроме того, когда я использую CMD [«—config.file», «/ipmi_remote.yml»], результирующее изображение не может найти файл, который абсолютно существует в каталоге сборки. Я вообще не понимаю пути к docker.
3. Вы имели в виду буквально CMD ipmi_exporter —web.listen-address=:8889 без скобок?
4. Да, когда вы
docker run
создаете изображение, оно будет интерпретироваться как обычная командная строка.5. Если вы это сделаете, это должен быть допустимый массив JSON, иначе Docker вернется к обработке его как команды оболочки. В форме в вопросе есть двойные двойные кавычки и пропущенные запятые между элементами массива. Также, если у вас есть оба
ENTRYPOINT
, иCMD
тогдаENTRYPOINT
должна быть форма JSON-массива. Документация DockerfileENTRYPOINT
содержит более подробную информацию; синтаксис там также применим кCMD
иRUN
.