RUN echo -e "deb http ... " 准备了错误的目标文件内容

Mic*_*ael 6 docker dockerfile

使用Ubuntu 16.04.2主机。

Docker版本 17.06.0-ce

文件

RUN echo -e "deb http://nginx.org/packages/mainline/ubuntu/ xenial nginx\ndeb-src http://nginx.org/packages/mainline/ubuntu/ xenial nginx" | tee /etc/apt/sources.list.d/nginx.list
Run Code Online (Sandbox Code Playgroud)

这导致/etc/apt/sources.list.d/nginx.list

-e deb http://nginx.org/packages/mainline/ubuntu/ xenial nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ xenial nginx
Run Code Online (Sandbox Code Playgroud)

好吧,好像对反斜杠转义的解释有效。但是这个“-e”已经出现在文件中。

然后无法构建这样的图像。

你能在这里踢我一脚吗?

Sam*_*Toh 11

尝试改用bash shellforecho命令。默认情况下,Docker 使用shshell,并且出于某种原因它不喜欢这些-e字符并将其作为其输入的一部分进行回显。

解决这个问题;

更新至:

RUN bash -c 'echo -e "deb http://nginx.org/packages/mainline/ubuntu/ xenial nginx\ndeb-src http://nginx.org/packages/mainline/ubuntu/ xenial nginx" | tee /etc/apt/sources.list.d/nginx.list'
Run Code Online (Sandbox Code Playgroud)

输出:

root@87944d07f493:/etc/apt/sources.list.d# cat nginx.list deb http://nginx.org/packages/mainline/ubuntu/ xenial nginx deb-src http://nginx.org/packages/mainline/ ubuntu/ xenial nginx

您可以通过切换到sh当前终端会话来复制这个“docker 问题” ,然后echo再次执行相同的命令。