Инструменты разработчика · Конвертер docker run в Docker Compose
Кавычки, разрывы строк и $VARS: правильный анализ команды запуска Docker
· Как это работает
докер командная строка цитирование
Команда запуска docker — это ввод оболочки еще до того, как Docker ее увидит. В этом посте объясняется, как кавычки и продолжение строк меняют токены и почему ни один конвертер не может расширить переменные оболочки.
Конвертер получил литерал $HOME — команда работает в вашем терминале, поскольку оболочка расширяет ее до запуска докера.
Конвертер получил литерал $HOME — команда работает в вашем терминале, поскольку оболочка расширяет ее до запуска докера. Доказательство: $HOME остается текстом, поскольку токенизатор не выполняет расширения. Воспроизведите токенизацию оболочки с помощью одноразовых литералов. Соедините каждое вхождение источника с цитируемыми токенами и продолжениями; зарезервируйте расширение и анализ Windows для проверки места назначения.
Инцидент с цитированием также показывает, что отдельная граница инцидента с цитированием заключается в том, что одинарные кавычки являются буквальными, а двойные кавычки обрабатывают документированные escape-последовательности. Доказательства: одинарные кавычки являются буквальными, а двойные кавычки обрабатывают документированные escape-последовательности. Это ограничение токенизации оболочки является точкой остановки. Проверьте цитируемые токены и продолжения без производственного поведения, затем задокументируйте проверку хоста на предмет расширения и синтаксический анализ Windows.
Этот токенизатор напоминает выбранные правила слова оболочки POSIX, но не выполняет расширение переменных или команд.
Сначала Shell, затем Docker — токены, которые получает Docker, являются результатом цитирования, разделения и расширения оболочки. Доказательства: выбранные правила слов, подобные POSIX, реализуются без превращения в оболочку; Этот токенизатор напоминает выбранные правила слов оболочки POSIX, но не выполняет расширения переменных или команд. Трассировка токенизации оболочки в цитируемые токены и продолжения. Отделяйте упорядоченные значения от полей последнего значения; расширение и анализ Windows находятся за пределами коллекции.
Соответствующая граница механизма цитирования заключается в том, что для этого раздела цитирования следует хранить оригинал команды этого раздела цитирования и предупреждения для этого раздела цитирования рядом с этим файлом-кандидатом. Доказательства: хранилище не дает более широких временных или исторических доказательств. Используйте этот факт токенизации оболочки, чтобы предсказать один член или скаляр в цитируемых токенах и продолжениях. Прежде чем принимать какие-либо решения относительно расширения и анализа Windows, проверяйте предупреждения.
Продолжение обратной косой черты-новой строки — почему завершающая обратная косая черта является функцией оболочки и пустым пробелом после того, как она нарушает команду
Продолжение обратной косой черты-новой строки — почему завершающая обратная косая черта является функцией оболочки и пустым пробелом после того, как она нарушает команду. Доказательство: обратная косая черта-новая строка исчезает, а одиночная обратная косая черта на терминале не работает. Оцените сериализацию токенизации оболочки по ее модели. Заключение в кавычки токенов и продолжений защищает типы, но не дает работоспособного подтверждения для расширения и синтаксического анализа Windows.
Второе наблюдение сериализации цитирования: отдельная граница вывода цитирования заключается в том, что образец вики можно нормализовать и проверить его литеральные токены. Доказательство: образец вики можно нормализовать и проверить его буквальные токены. Этот вывод токенизации оболочки отделяет настройки от недоступного контекста. Сохраняйте цитируемые токены и продолжения доступными для просмотра и независимо проверяйте расширение и анализ Windows.
Одинарные, двойные кавычки и пробелы в значениях — -e MSG='hello world' и -e MSG=hello world
Одинарные, двойные кавычки и пробелы в значениях — -e MSG='привет, мир' и -e MSG=привет, мир. Вместо того чтобы гадать, остановитесь на исключении токенизации оболочки. Для любого добавления рядом с указанными токенами и продолжениями требуется причина, специфичная для развертывания, связанная с расширением и синтаксическим анализом Windows.
Еще одно ограничение исключения цитирования заключается в том, что отдельная граница исключения цитирования заключается в том, что арность параметров Docker соответствует токенизации, а правила Windows отсутствуют. Доказательства: арность параметров Docker соответствует токенизации, а правила Windows отсутствуют. Сохраняйте исходную команду токенизации оболочки рядом с предупреждениями. Сравнение показывает, что содержат цитируемые токены и продолжения, а какие расширения и решения по синтаксическому анализу Windows остаются ручными.
Выражения доллара, синтаксис подоболочки и тильды остаются буквальными, поскольку конвертер не является оболочкой.
Переменные и подоболочки — $PWD, $(id -u) и ~ расширяются вашей оболочкой, поэтому преобразователь видит их буквально. Доказательства: обратные кавычки в обозначениях подоболочек, долларовые переменные и тильда никогда не оцениваются; Выражения доллара, синтаксис подоболочки и тильды остаются буквальными, поскольку преобразователь не является оболочкой. Создайте пример токенизации оболочки из синтетических имен. Сделайте каждый цитируемый токен и элемент продолжения отслеживаемым, не раскрывая детали расширения производства и анализа Windows.
В том же примере примера цитирования показано, что для этого раздела цитирования следует хранить оригинал команды этого раздела цитирования и предупреждения для этого раздела цитирования рядом с этим файлом-кандидатом. Факт токенизации парной оболочки должен быть виден в цитируемых токенах и продолжениях. Запишите эту строку и избегайте предположений о расширении и синтаксическом анализе Windows.
Рабочий пример: очистка вставленной из вики команды — нормализация продолжений и цитирование перед преобразованием, затем проверка YAML.
Рабочий пример: очистка вставленной вики-команды — нормализация продолжений и цитирование перед преобразованием, затем проверка YAML. Переведите следствие токенизации оболочки в одну наблюдаемую разницу между токенами и продолжениями в кавычках. Docker владеет более поздним расширением и вердиктом синтаксического анализа Windows.
Реализация последствий цитирования также показывает. Отдельная граница эффекта кавычек заключается в том, что $HOME остается текстом, поскольку токенизатор не выполняет расширения. Разделите обязанности по токенизации оболочки: преобразование записывает цитируемые токены и продолжения, репозиторий удаляет секреты, а операторы проверяют расширение и синтаксический анализ Windows.
Цитирование оболочки Windows и полное расширение POSIX находятся за пределами этого синтаксического анализатора.
Чего это не касается — особенности синтаксического анализа параметров Docker Run, такие как = и пробел, а также различия в кавычках оболочки Windows. Доказательства: арность параметров Docker соответствует токенизации, а правила Windows отсутствуют; Цитирование оболочки Windows и полное расширение POSIX находятся за пределами этого синтаксического анализатора. Ограничьте область токенизации оболочки указанными токенами и ветвями продолжения, показанными здесь. Соседние формы и значения по умолчанию не могут отвечать на вопросы расширения и анализа Windows.
Еще одно ограничение области цитирования следует из сохранения исходной команды для этого раздела цитирования и предупреждений рядом с этим файлом-кандидатом. Считайте эту границу токенизации оболочки исключением. Предпочитайте точные кавычки и продолжения, а не предположения о расширении и синтаксическом анализе Windows.
Вывод: дайте конвертеру то, что увидит Docker, и замените переменные оболочки литеральными значениями или создайте интерполяцию ${VAR}.
Вывод: дайте конвертеру то, что увидит Docker, и замените переменные оболочки литеральными значениями или создайте интерполяцию ${VAR}. Доказательства: надежный ввод означает предоставление буквальных слов, предназначенных для анализа. Аудит токенизации оболочки в качестве параметра источника, поля модели, цитируемых токенов, строки продолжения и предупреждения. Удалите секреты перед проверкой расширения и разбором Windows.
Наконец, источник цитирования подтверждает. Отдельная граница принятия решения о цитировании заключается в том, что обратная косая черта-новая строка исчезает, а одиночная обратная косая черта на терминале не работает. Узкая токенизация закрытой оболочки: кандидатами являются цитируемые токены и продолжения; расширение, синтаксический анализ Windows и эквивалентность оболочки не являются гарантиями.