2017-02-28 32 views
1

在最新的macOS上使用最新的Docker for Mac。爲什麼Dockerfile RUN打印回顯選項?

我有一個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選項!這個選項已經被回聲挑選出來了,正如被解析的換行符所顯示的那樣。事實上,如果我附加到容器並再次運行相同的命令,我會得到正確的文件內容。我想這可能是與docker build引述RUN每個參數的問題,但是即使我運行echo "-e" "X\nY"命令打印:

X 
Y 

沒有人有任何想法,爲什麼會發生這種情況?

回答

5

嘗試運行:

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

Source

+1

我剛剛更換'echo'用'/斌/ echo',因爲我不想處理雙引號。 –

0

最好不要使用雙引號中RUN。始終使用單引號或使用ENV變量來設置環境變量。

例如:

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

ENV JAVA_HOME /usr/bin/java