У самурая нет тестов, только прод



Здрасти. Есть куча способов как определить, в каком окружении запущен Bash скрипт. На хостовой машине или внутри docker контейнера. Я предпочитаю самый простой.



if [ -f /.dockerenv ]; then

echo "I'm inside docker";

else

echo "I'm living in real world!";

fi




Банально проверяем наличие файла .dockerenv и всё! Да, так просто. Способ самый универсальный и используется разработчиками в 99% случаев.



И да файл .dockerenv можно удалить и тогда скрипт сломается. Удобно, если хочешь помешать скриптам определять где они выполняются. НО после перезапуска контейнера файл .dockerenv снова появится.



А если требуется высший пилотаж, прям УНИВЕРСАЛЬНО, прочекать docker и lxc, идем таким путём:



if [ -n "$(grep 'kthreadd' /proc/2/status 2>/dev/null)" ]; then

echo "I'm living in real world!"

else

echo "I'm inside container";

fi




Тут суть такая, во всех хост-системах PID(2) == kthreadd.



Запускаем на хостовой машине:



ps -p 2



PID TTY TIME CMD

2 ? 00:00:00 kthreadd




Запускаем в контейнере:



ps -p 2

PID TTY TIME CMD

хуй с маслом




✔️ Может зафакапить, так как не установлен пакет procps.



Да, кто не знал, как сохранять изменения в docker контейнерах, применяется commit. То есть ставишь софт в контейнере, настраиваешь его там под себя. А потом делаешь:



docker commit <ID> <name>




<ID> - ID того контейнера, в котором все ставил

<name> - да похуй, можешь указать тот же самый



После перезапуска контейнера все твои настройки сохранятся. Но лучше этим не частить, а собирать контейнеры сразу с нужной тебе хуйнёй.



Ладно, погнали дальше спасать этот прекрасный мир.



tags: #linux #bash



@BАSHDАYS | BАSHDАYS.CОM