为什么我的Dockerfile的ARG没有扩展?

时间:2016-08-04 07:50:41

标签: docker

这是调用ARG的代码块:

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 args

在这段代码之前,我在Dockerfile的开头声明了这个:

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

它仍然无法正常工作。在Docker镜像中,cat rabbitmq.config逐字返回${RABBITMQ_USER}

1 个答案:

答案 0 :(得分: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