在最新的macOS上使用最新的docker。
我有一个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=60sn" > /etc/ansible/ansible.cfg
问题是回声命令。该命令产生的文件的内容是:
-e [ssh_connection]
ssh_args = -o ControlMaster=no -o ControlPersist=60s
也打印了-e选项!ECHO的选项甚至更疯狂,这是新lines被解析的。实际上,如果我附加到容器上并再次运行相同的命令,则会获得正确的文件内容。我认为这可能是docker build
在运行中引用每个参数的问题,但是即使我运行echo "-e" "XnY"
命令打印:
X
Y
有人知道为什么会发生这种情况吗?
尝试运行:
RUN bash -c 'echo -e ...'
源
仔细阅读https://github.com/docker/docker/sissues/8949,我知道怪异行为的原因取决于解释壳。
在我的情况下,运行Ubuntu映像,足以删除 -E 以正确格式化行:
RUN echo "# User rules for foobarn
foobar ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/nopasswd
的结果是:
# User rules for foobar
foobar ALL=(ALL) NOPASSWD:ALL
最好不要在 RUN
中使用双引号。始终使用单个报价或使用ENV
变量来设置环境变量。
ex:
echo '******* Installing PPA pack ********'
ENV JAVA_HOME /usr/bin/java