Я пытаюсь передать переменную окружения в docker. Эта переменная должна быть (повторно) интерпретирована приложением, работающим внутри docker.
Предполагается, что эта переменная содержит разделенный запятыми список, но мои элементы списка содержат сами запятые.
Я пытаюсь экранировать запятые внутри элементов списка и использую неэкранированные запятые для разделения элементов.
Мои элементы списка являются отличительными именами некоторых сертификатов (следовательно, они содержат запятые).
Я попытался передать переменную окружения, заключенную в одинарные, двойные кавычки, экранировать мой backsla sh и удалить его. Ни один из этих сценариев ios не оставил мне единственной обратной косой черты sh:
# Single quote, single backslash
me@me:~$ docker run --rm --name commatest -d -e PSEUDO_LIST='CN=cn\,OU=ou,CN=cn2\,OU=ou2' busybox sleep 1000; docker inspect commatest | grep PSEUDO_LIST; docker stop commatest;
ed09a7570c83a6a2d9b7d888eb7c83ee763a7a60f1222d1ad0ba4e070cb73de6
"PSEUDO_LIST=CN=cn\\,OU=ou,CN=cn2\\,OU=ou2",
commatest
# Single quote, double backslash
me@me:~$ docker run --rm --name commatest -d -e PSEUDO_LIST='CN=cn\\,OU=ou,CN=cn2\\,OU=ou2' busybox sleep 1000; docker inspect commatest | grep PSEUDO_LIST; docker stop commatest;
dedb0c4eed40454af55519df864468602785ab247c0e6ff85943d56c1f784aa1
"PSEUDO_LIST=CN=cn\\\\,OU=ou,CN=cn2\\\\,OU=ou2",
commatest
# Double quote, single backslash
me@me:~$ docker run --rm --name commatest -d -e PSEUDO_LIST="CN=cn\,OU=ou,CN=cn2\,OU=ou2" busybox sleep 1000; docker inspect commatest | grep PSEUDO_LIST; docker stop commatest;
31e1051926400ca0b02ddd2ad17146c2a46ba62dd2a724afee5aba47f243551e
"PSEUDO_LIST=CN=cn\\,OU=ou,CN=cn2\\,OU=ou2",
commatest
# Double quote, double backslash
me@me:~$ docker run --rm --name commatest -d -e PSEUDO_LIST="CN=cn\\,OU=ou,CN=cn2\\,OU=ou2" busybox sleep 1000; docker inspect commatest | grep PSEUDO_LIST; docker stop commatest;
ae65699be53810f773f0d42c43ab1f884c4d7111c2c22ec3a489a19b534d0dd4
"PSEUDO_LIST=CN=cn\\,OU=ou,CN=cn2\\,OU=ou2",
commatest
Поведение по умолчанию в bash состоит в отображении только двух обратных косых черт в этом сценарии: '\\'
, но это явно не то же самое для docker:
# Single quote, single backslash
me@me:~$ PSEUDO_LIST='CN=cn\,OU=ou,CN=cn2\,OU=ou2'; echo "${PSEUDO_LIST}"
CN=cn\,OU=ou,CN=cn2\,OU=ou2
# Single quote, double backslash
me@me:~$ PSEUDO_LIST='CN=cn\\,OU=ou,CN=cn2\\,OU=ou2'; echo "${PSEUDO_LIST}"
CN=cn\\,OU=ou,CN=cn2\\,OU=ou2
alin@Touchbar-Monstrosity:~$
# Double quote, single backslash
me@me:~$ PSEUDO_LIST="CN=cn\,OU=ou,CN=cn2\,OU=ou2"; echo "${PSEUDO_LIST}"
CN=cn\,OU=ou,CN=cn2\,OU=ou2
# Double quote, double backslash
me@me:~$ PSEUDO_LIST="CN=cn\\,OU=ou,CN=cn2\\,OU=ou2"; echo "${PSEUDO_LIST}"
CN=cn\,OU=ou,CN=cn2\,OU=ou2
Дополнительная информация:
- Docker версия 19.03.5, сборка 633a0ea
- ОС: MacOS Mojave 10.14.6
Я мог бы повторить это на наших linux серверах:
- Docker версия 18.09.6, сборка 481bc77156
- ОС: Red Hat Enterprise Linux Серверная версия 7.7