sed
-Специальный совет: используйте вставку, а не замену
Ниже все еще предполагается реализация нестандартной опции -i
, совместимой с GNU sed
.
RUN sed -i -e '2i/bootstrap_mongo_on_k8s.sh &' /usr/local/bin/docker-entrypoint.sh
... или, если сформулировано с использованием приведенного ниже совета:
RUN ["sed","-i","-e","2i/bootstrap_mongo_on_k8s.sh &","/usr/local/bin/docker-entrypoint.sh"]
Общие рекомендации: безопасная передача команд через Docker
Как правило, самый безопасный способ передачи точного содержимого вкоманда RUN
представляет собой список JSON.
Если исходная, проверенная команда оболочки, которую вы хотите запустить в Docker, имеет следующий вид:
sed -i 's/#!\/bin\/bash/#!\/bin\/bash\n\/bootstrap_mongo_on_k8s.sh \&\n/' /usr/local/bin/docker-entrypoint.sh
... литеральные строки, из которых она состоитпо одному на строку:
sed
-i
s/#!\/bin\/bash/#!\/bin\/bash\n\/bootstrap_mongo_on_k8s.sh \&\n/
/usr/local/bin/docker-entrypoint.sh
В виде списка JSON это будет:
["sed","-i","s/#!\\/bin\\/bash/#!\\/bin\\/bash\\n\\/bootstrap_mongo_on_k8s.sh \\&\\n/","/usr/local/bin/docker-entrypoint.sh"]
Обратите внимание на двойные обратные слэши.Это может быть сгенерировано командой вида:
printf '%s\n' \
sed \
-i \
's/#!\/bin\/bash/#!\/bin\/bash\n\/bootstrap_mongo_on_k8s.sh \&\n/' /usr/local/bin/docker-entrypoint.sh \
| jq -Rnc '[inputs]'