Ошибка сегментации при выполнении двоичного файла в контейнере runc

У меня есть особая проблема с контейнером Runc. У меня есть скрипт bash (работающий от имени root), который выполняет следующее:

$ setcap cap_net_bind_service=+ep ${PACKAGE_DIR}/bin/my-binary
$ chpst -u vcap:vcap "${PACKAGE_DIR}/bin/my-binary" --config "${JOB_DIR}/config/config.json"

каждый раз, когда он запускается при запуске контейнера, происходит сбой с таким выводом:

 5116 Segmentation fault      chpst -u vcap:vcap "${PACKAGE_DIR}/bin/my-binary" --config "${JOB_DIR}/config/config.json"

Тем не мение:

  • Когда я ssh или shell в контейнер и запускаю команду вручную, она будет работать.
  • Если я удалю chpst -u vcap:vcap (запустить от имени root) это также будет работать.
  • Если я удалю setcap cap_net_bind_servic... Декларация, это также будет работать.
  • Когда я меняю chown my-binary в vcap:vcap, это будет работать.

Но ни один из них не является действительным вариантом для реальной реализации. Я даже отредактировал исходный код двоичного файла так, чтобы он просто спал в течение 2 часов - что не имело никакого эффекта, поэтому я не думаю, что фактический исходный код двоичного файла является причиной. Я что-то упускаю?

Моя версия runc:

runc version 1.0.0-rc5+dev
commit: 69663f0bd4b60df09991c08812a60108003fa340
spec: 1.0.0

1 ответ

Решение

Недостающим фрагментом головоломки были вот эти кусочки бревен:

[  197.027144] bosh-dns[29239] vsyscall attempted with vsyscall=none ip:ffffffffff600000 cs:33 sp:7ffeeb9ea458 ax:ffffffffff600000 si:0 di:7ffeeb9ea460
[  197.028504] bosh-dns[29239]: segfault at ffffffffff600000 ip ffffffffff600000 sp 00007ffeeb9ea458 error 15
[  197.028772] bosh-dns[29233] vsyscall attempted with vsyscall=none ip:ffffffffff600000 cs:33 sp:7ffea26a3028 ax:ffffffffff600000 si:0 di:7ffea26a3030
[  197.028774] bosh-dns[29233]: segfault at ffffffffff600000 ip ffffffffff600000 sp 00007ffea26a3028 error 15

Я не знаю почему, но решение моей проблемы было добавить vsyscall=emulate к аргументам командной строки ядра, которые я использовал.

Другие вопросы по тегам