使用最新的Docker for Mac,在最新版的macOS上。
我有一个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
有人知道为什么会发生这种情况吗?
/bin/echo
替换了echo
,因为我不想处理双引号。 - RokL