这是调用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}
。
答案 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