Работает ли `strace -f` по-разному при запуске внутри контейнера Docker?
Предположим следующее:
- У меня есть программа
myprogram
внутри докера Я запускаю контейнер докера с
docker run --privileged=true my-label/my-container
Внутри контейнера - программа запускается с:
strace -f -e trace=desc ./myprogram
Я вижу, что strace
(несмотря на то, что -f
на) не отслеживает все дочерние процессы.
Я вижу следующий вывод из strace
[pid 10] 07:36:46.668931 write(2, "..\n"..., 454 <unfinished ...>
<stdout of ..>
<stdout other output - but I don't see the write commands - so probably from a child process>
[pid 10] 07:36:46.669684 write(2, "My final output\n", 24 <unfinished ...>
<stdout of My final output>
То, что я хочу увидеть, это другой write
команды.
Теперь я должен увидеть другой write
команды - потому что я использую -f
,
Я думаю, что то, что происходит внутри докера, делает процесс обработки и безопасность разными.
Мой вопрос: strace -f
работать по-другому при запуске внутри контейнера докера?
Обратите внимание, что это приложение запускается и останавливается через 2 секунды - поэтому инструмент трассировки должен следовать жизненному циклу приложения - как strace
делает. Подключение к серверу фоновый процесс не будет работать.
1 ответ
Оказывается strace
обрезает вывод строки - вы должны явно указать ей, что вы хотите больше, чем первые n (10?) строковых символов. Вы делаете это с -s 800
,
strace -s 800 -ff ./myprogram
Вы также можете получить все write
команды, спрашивая strace
явно с -e write
,
strace -s 800 -ff -e write ./myprogram