Экранирование символов в переменных Docker #80

Open
opened 2025-08-18 05:14:30 +00:00 by cuqmbr · 1 comment
Owner

Определить список символов, которые нужно экранировать при указывании строки в переменную среды контейнера Docker флагом --env FOO=bar. Сделать так, чтобы эти символы совпадали для каждого плагина с подключением к БД.

Подсказка: в файлах конфигурации плагинов в полях для ввода пароля БД используются разные типы кавычек, что может менять разрешённые в пароле символы.

Определить список символов, которые нужно экранировать при указывании строки в переменную среды контейнера Docker флагом `--env FOO=bar`. Сделать так, чтобы эти символы совпадали для каждого плагина с подключением к БД. Подсказка: в файлах конфигурации плагинов в полях для ввода пароля БД используются разные типы кавычек, что может менять разрешённые в пароле символы.
cuqmbr self-assigned this 2025-08-18 17:45:17 +00:00
Author
Owner

Что удалось узнать

Символы, которые нужно экранировать зависят от среды выполнения команды docker run (shell, команда запуска в панели, ...), кавычек в файле с паролем и синтаксисом команды sed в Dockerfile.

Список последовательностей символов, которые нужно экранировать символом \:

  • &
  • \n, где n - цифры 0 - 9
  • \L
  • \l
  • \U
  • \u
  • \E
  • \
  • /

Указания

Общие:

  • в файлах настроек плагинов в формате yaml поле, где должен находиться пароль, оборачивать в одинарные кавычки: mysql_password: '_MYSQL_PASSWORD_';
  • для других форматов смотри исключения и следующие комментарии.

При запуске в оболочке bash:

  • аргументы всех флагов --env команды docker run оборачивать в одинарные кавычки, например: ... --env 'MY_ENV_VAR=my_val' ...;
  • если значение переменной содержит одинарные кавычки, их нужно выделять в отдельную строку и конкатенировать (вместо одинарной кавычки использовать '"'"'): --env 'MY_ENV_VAR=my_'"'"'val'"'"''. [Подробнее].

При запуске в MCSManager:

  • аргументы всех флагов --env команды docker run НЕ оборачивать в одинарные кавычки, например: ... --env MY_ENV_VAR=my_val ....

Пример

--env MY_ENV=2ex&k]S"/X)RQ\41d[T=7s',/Z=^a\ERj - Исходная переменная
--env 'MY_ENV=2ex\&k]S"\/X)RQ\\41d[T=7s'"'"',\/Z=^a\\ERj' - Экранированная переменная для bash:
--env 'MY_ENV=2ex\&k]S"\/X)RQ\\41d[T=7s',\/Z=^a\\ERj' - Экранированная переменная для MCSManager
--env 'MY_ENV=2ex\&k]S\"\/X)RQ\\41d[T=7s',\/Z=^a\\ERj' - Экранированная переменная для MCSManager и плагина LibreLogin

Исключения

  • файл настроек плагина LibreLogin имеет кастомный формат, плагин парсит только двойные кавычки. В значениях переменных нужно экранировать символ ".
### Что удалось узнать Символы, которые нужно экранировать зависят от среды выполнения команды `docker run` (shell, команда запуска в панели, ...), кавычек в файле с паролем и [синтаксисом](https://www.gnu.org/software/sed/manual/sed.html#The-_0022s_0022-Command) команды `sed` в [Dockerfile](https://gitea.cuqmbr.xyz/bebrashield/server-survival/src/commit/733c2d7d266ff7eb3c824d4d881b2155714b133c/Dockerfile#L161-L203). Список последовательностей символов, которые нужно экранировать символом `\`: - & - \n, где n - цифры 0 - 9 - \L - \l - \U - \u - \E - \ - / ### Указания Общие: - в файлах настроек плагинов в формате _yaml_ поле, где должен находиться пароль, оборачивать в одинарные кавычки: `mysql_password: '_MYSQL_PASSWORD_'`; - для других форматов смотри исключения и следующие комментарии. При запуске в оболочке bash: - аргументы всех флагов --env команды `docker run` оборачивать в одинарные кавычки, например: `... --env 'MY_ENV_VAR=my_val' ...`; - если значение переменной содержит одинарные кавычки, их нужно выделять в отдельную строку и конкатенировать (вместо одинарной кавычки использовать `'"'"'`): `--env 'MY_ENV_VAR=my_'"'"'val'"'"''`. [[Подробнее](https://stackoverflow.com/questions/1250079/how-to-escape-single-quotes-within-single-quoted-strings)]. При запуске в MCSManager: - аргументы всех флагов --env команды `docker run` **НЕ** оборачивать в одинарные кавычки, например: `... --env MY_ENV_VAR=my_val ...`. ### Пример `--env MY_ENV=2ex&k]S"/X)RQ\41d[T=7s',/Z=^a\ERj` - Исходная переменная `--env 'MY_ENV=2ex\&k]S"\/X)RQ\\41d[T=7s'"'"',\/Z=^a\\ERj'` - Экранированная переменная для bash: `--env 'MY_ENV=2ex\&k]S"\/X)RQ\\41d[T=7s',\/Z=^a\\ERj'` - Экранированная переменная для MCSManager `--env 'MY_ENV=2ex\&k]S\"\/X)RQ\\41d[T=7s',\/Z=^a\\ERj'` - Экранированная переменная для MCSManager и плагина LibreLogin ### Исключения - файл настроек плагина LibreLogin имеет кастомный формат, плагин парсит только двойные кавычки. В значениях переменных нужно экранировать символ `"`.
cuqmbr changed title from Экранирование символов пароля БД to Экранирование символов в переменных Docker 2025-08-22 16:39:13 +00:00
Sign in to join this conversation.
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
bebrashield/task-tracker#80
No description provided.