Docker не раскрывает значения ARG в команде RUN. Вместо этого он вводит ARG как переменную окружения. Оболочка сама расширяет переменную, и все оболочки Linux, которые я использовал, ведут себя по-разному в зависимости от типа кавычки.
Одинарные кавычки указывают оболочке не расширять что-либо, и вам нужно только экранировать одинарные кавычки и экранирующие символы. В то время как двойные кавычки включают в себя расширение переменных наряду со многими другими символами escape. Для получения более подробной информации смотрите страницу руководства на вашей оболочке.
Итак, решение, которое вы уже нашли:
RUN echo "Hello $w"