2016-08-04 4 views
0

Вот фрагмент кода вызова ARG:Почему не расширяется ARG моего Dockerfile?

RUN \ 
wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add - && \ 
echo "deb http://www.rabbitmq.com/debian/ testing main" > /etc/apt/sources.list.d/rabbitmq.list && \ 
apt-get update && \ 
DEBIAN_FRONTEND=noninteractive apt-get install -y rabbitmq-server && \ 
rm -rf /var/lib/apt/lists/* && \ 
rabbitmq-plugins enable rabbitmq_management && \ 
echo '[{rabbit, [{loopback_users, []}, {default_user,<<"${RABBITMQ_USER}">>}, {default_pass,<<"${RABBITMQ_PASSWD}">>}]}].' > /etc/rabbitmq/rabbitmq.config 

Обратите внимание на RABBITMQ_PASSWD и RABBITMMQ_USER арг

До этого куска кода, я заявил об этом в начале Dockerfile:

FROM ubuntu:14.04 
ARG RABBITMQ_USER=123 
ARG RABBITMQ_PASSWD=123 

И все еще не работает. В изображении Докера, cat rabbitmq.config возвращает ${RABBITMQ_USER} дословно.

ответ

1

Ничего плохого в команде ARG. Вы пытаетесь расширить переменную внутри одной цитаты в команде bash, что невозможно.

Expansion of variable inside single quotes in a command in bash shell script

Все, что вам нужно сделать, это использовать двойные кавычки и избежать внутренних двойные кавычки следующим образом.

echo "[{rabbit, [{loopback_users, []}, {default_user,<<\"${RABBITMQ_USER}\">>}, {default_pass,<<\"${RABBITMQ_PASSWD}\">>}]}]." > /etc/rabbitmq/rabbitmq.config 
Смежные вопросы