为什么我的Dockerfile的ARG不能扩展?

这是调用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_PASSWDRABBITMMQ_USER参数

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

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

而且它仍然没有工作。 在Docker镜像中, cat rabbitmq.config将逐字返回${RABBITMQ_USER}

ARG命令没有错。 你正试图在一个不可能的bash命令的单引号内部展开variables。

在bash shell脚本的命令中扩展单引号内的variables

所有你需要做的就是使用双引号和转义内部双引号如下。

 echo "[{rabbit, [{loopback_users, []}, {default_user,<<\"${RABBITMQ_USER}\">>}, {default_pass,<<\"${RABBITMQ_PASSWD}\">>}]}]." > /etc/rabbitmq/rabbitmq.config