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



主机与Ubuntu 16.04.2.

码头工人版本 17.06.0-ce

Dockerfile

RUN echo -e "deb http://nginx.org/packages/mainline/ubuntu/ xenial nginxndeb-src http://nginx.org/packages/mainline/ubuntu/ xenial nginx" | tee /etc/apt/sources.list.d/nginx.list

这导致/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

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

然后就无法建立这样的图像。

你能在这里给我踢一脚吗?

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

要解决此问题;

更新到:

RUN bash -c 'echo -e "deb http://nginx.org/packages/mainline/ubuntu/ xenial nginxndeb-src http://nginx.org/packages/mainline/ubuntu/ xenial nginx" | tee /etc/apt/sources.list.d/nginx.list'

输出:

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/森尼尔·恩金克斯

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

正如Samuel Toh评论的那样,这是一个问题,因为Docker使用sh来执行命令。这个问题之所以发生,是因为sh(shell(有一个内置的"echo"命令,它不接受任何标志,甚至不接受-h/--help。因此,它只是打印任何内容。

您可以按照对 bash 的调用的建议来包装您的调用,或者明确要求使用正确的 bash 版本:

RUN /bin/echo -e "deb http://nginx.org/packages/mainline/ubuntu/ xenial nginxndeb-src http://nginx.org/packages/mainline/ubuntu/ xenial nginx" | tee /etc/apt/sources.list.d/nginx.list
">

echo"二进制文件可能安装在docker镜像中的不同位置,因此请确保在"which"的帮助下检查它的位置(/bin/,/usr/bin/等(,并在上面的命令中相应地替换它。

最新更新