У нас есть набор микросервисов, опубликованных, поскольку докер отображает и выполняет их на месте для локального тестирования и в кластере AKS k8s. Мы используем человечность 16.04, потому что в настоящее время AKS использует ее.
Мы хотели бы автоматически собрать coredump, когда наш микросервис отказывает в контейнере докера. Мы имеем, успешно достигают его с помощью инструкций относительно окружения, но мы хотели бы использовать человечность по левую сторону судна перехватчик для сбора CoreDump.
Но мы не могущий собрать дамп из-за следующей ошибки:
ОШИБКА: по левую сторону судна (pid 26994) четверг 9 апреля 16:17:34 2020: pid 26979 хоста, разрушенный в контейнере без по левую сторону судна, поддерживает
docker run -d --privileged -v /var/crash:/var/crash ubuntu:16.04 /bin/sleep 50000
docker kill <CreatedContainerId>
После взгляда на то, что по левую сторону судна делает, кажется, что мы должны установить по левую сторону судна в контейнере. Не проблема, создайте Dockerfile с по левую сторону судна установкой:
FROM ubuntu:16.04
RUN apt-get update && apt-get install -y --no-install-recommends systemd apport && rm -rf /var/lib/apt/lists/*
RUN sed -i "s/enabled=0/enabled=1/g" /etc/default/apport
RUN sed -i "s/'problem_types'/#'problem_types'/g" /etc/apport/crashdb.conf
COPY ./super.sh /opt/super.sh
RUN ["chmod", "+x", "/opt/super.sh"]
WORKDIR /opt
ENTRYPOINT [ "/opt/super.sh" ]
где super.sh:
#!/bin/bash
service apport start
sleep 50000
Но они также приводят к тому же результату. Должен быть apport.socket
запись под хостом /proc/<host_pid>/root/run/
каталог, который, вероятно, говорит по левую сторону судна, что другой экземпляр его в порядке в контейнере. apport.socket
сокет активации, который потребует, чтобы systemd работал в контейнере.
Вопросы
apport
?apport
правильно передать coredump набор?P.S.
Мы достигли поведения, которое мы хотели, когда комментируют некоторые блоки кода в/usr/share/apport/apport, представленном
869366238 data/apport (Brian Murray 2017-11-20 08:46:52 -0800)
но это не решение, которое мы хотели бы принять.
Для тех, кто действительно заинтересовал, вот наши результаты.
Для apport.socket
чтобы послушаться, необходимо установить systemd сначала. Для работ systemd правильно, это должен быть первый процесс в контейнере, таким образом, необходимо изменить Ваш ENTRYPOINT
команда, чтобы быть /sbin/init
. Для по левую сторону судна для работы правильно в контейнере необходимо установить python3-systemd
модуль, который включает systemd активацию и параметры propogation. Для выполнения процесса необходимо записать простой файл единицы, который описывает, как запустить приложение с systemd. Для человечности 18.04 также необходимо установить init
пакет для разрешения /sbin/init
быть выполненным.
При использовании некоторого другого вида другой виртуализации, как VMware в моем случае (который выполняет человечность хоста, на которой контейнеры докера работают), также необходимо удалить ConditionVirtualization=container
от apport-forward.socket
файл, потому что иначе systemd не послушает сокет активации, упомянутый ранее.
Объединение в целом, здесь что можно сделать, чтобы позволить по левую сторону судна внутреннему контейнеру работать правильно.
Dockerfile
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-bionic
COPY dotnet.service /lib/systemd/system/
RUN apt-get update && apt-get install -y --no-install-recommends \
systemd \
init \
apport \
python3-systemd && rm -rf /var/lib/apt/lists/*
RUN sed -i "s/enabled=0/enabled=1/g" /etc/default/apport && \
sed -i "s/'problem_types'/#'problem_types'/g" /etc/apport/crashdb.conf && \
sed -i "s/ConditionVirtualization=container//g" /lib/systemd/system/apport-forward.socket
RUN systemctl enable apport-forward.socket && \
systemctl enable dotnet.service
# our app
COPY . /opt/app
WORKDIR /opt/app
EXPOSE 5000
ENTRYPOINT [ "/sbin/init" ]
dotnet.service
[Unit]
Description=My service
[Service]
Type=oneshot
ExecStart=/opt/app/MyServiceElf
[Install]
WantedBy=multi-user.target
все это добавляет дополнительный ~65MB данных, которые являются сумасшедшими взглядами, таким образом, мы передаем этот вопрос по левую сторону судна репозиторию