为什么Dockerfile RUN打印回显选项?

时间:2017-02-28 12:05:34

标签: docker dockerfile

在最新的macOS上使用最新的Docker for Mac。

我有一个Dockerfile:

FROM debian:8
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update -y -q \
    && apt-get install -y -q apt-utils \
    && apt-get upgrade -y -q \
    && apt-get install -y -q ssh build-essential libssl-dev libffi-dev python-dev python-pip python-six openjdk-7-jdk \
    && mkdir -p /etc/ansible \
    && echo -e "[ssh_connection]\nssh_args = -o ControlMaster=no -o ControlPersist=60s\n" > /etc/ansible/ansible.cfg

问题在于echo命令。该命令生成的文件内容为:

-e [ssh_connection]
ssh_args = -o ControlMaster=no -o ControlPersist=60s

也会打印-e选项!这个选项已被echo拾取,这更加疯狂,正如被解析的新行所证明的那样。事实上,如果我附加到容器并再次运行相同的命令,我会得到正确的文件内容。我认为这可能是docker build在RUN中引用每个参数的问题,但即使我运行echo "-e" "X\nY"命令打印:

X
Y

有谁知道为什么会这样?

2 个答案:

答案 0 :(得分:9)

尝试跑步:

RUN bash -c 'echo -e ...'

watch window

答案 1 :(得分:0)

最好不要在RUN中使用双引号。始终使用单引号或使用ENV变量来设置环境变量。

前:

echo '******* Installing PPA pack ********'

ENV JAVA_HOME /usr/bin/java