Проблема с командой + комбинации Трассирование является то, что Докер имеет модель клиент/сервер, и ваш docker run
представляет клиентскую сторону сделки REST API, чтобы задать Docker демон запустить контейнер Apache от вашего имени. В зависимости от того, как настроен ваш клиент, этот контейнер может даже не работать в той же системе, на которой вы вводите команду docker run
.
Однако, чтобы взять простейший случай, когда клиент и демон Docker находятся в одной и той же системе, вы можете использовать ps
найти PID работающего сервера Apache и использовать strace для соединения и отслеживания уже начатого процесса поскольку этого достаточно для ваших потребностей отслеживания.
Учитывая, что мне пришлось отлаживать некоторые проблемы с ранним запуском с помощью «runc», исполнителя для контейнеров в докерной версии 1.11 и выше, я также создал небольшую обертку для docker-runc
, которая с самого начала запускает контейнерный процесс strace (извне системы, поэтому в файловой системе контейнера не требуется strace). Вы можете найти его here on GitHub, хотя справедливое предупреждение о том, что он несколько глючит для регулярного использования, так как я полагаю, что вызов shell + strace мешает некоторой сигнализации между containerd
и реальным docker-runc
и связанными с ним процессами. Более элегантным решением может быть создание варианта runc
, который знает, как добавить фактическое начало содержащегося процесса с помощью оболочки strace, а не перехватывать весь вызов runc
в strace.
Ваше предложение подразумевает, что strace должен быть установлен в образ Docker, который я хочу контролировать, что я не могу предположить. –