Dockerfile CMD curl --noproxy *带空格的参数不起作用

时间:2018-02-23 03:24:34

标签: docker curl dockerfile

我今天遇到了一件奇怪的事。 以下是步骤:

1.我运行下面的cmd并输出:

shshenhx@shshenhx:~/Desktop/Docker/IP$ curl --noproxy '*' http://ip.cn
当前 IP:202.101.0.2 来自:上海市 电信 <====The cmd get my public IP 
successfully

2。然后我得到了一个Dockerfile和这样的内容:

FROM ubuntu
RUN apt-get update \
&& apt-get install -y curl \
&& rm -rf /var/lib/apt/lists/*

RUN curl --noproxy '*' http://ip.cn  <==Here I run the cmd directly

输出仍然是

shshenhx@shshenhx:~/Desktop/Docker/IP$ curl --noproxy '*' http://ip.cn
当前 IP:202.101.0.2 来自:上海市 电信

3.如果我将最后一行更改为CMD模型,请执行以下操作:

FROM ubuntu
RUN apt-get update \
&& apt-get install -y curl \
&& rm -rf /var/lib/apt/lists/*

CMD ["curl" ,  "--noproxy '*'" , "http://ip.cn"]

然后我得到了这样的错误:

shshenhx@shshenhx:~/Desktop/Docker/IP$ docker run myip
curl: option --noproxy '*': is unknown
curl: try 'curl --help' or 'curl --manual' for more information

有人能解决这个问题吗?为什么我可以在dockerfile中使用RUN运行curl cmd,但是使用CMD失败了?

1 个答案:

答案 0 :(得分:1)

不属于参数的每个空格都需要,

CMD [ "curl" ,  "--noproxy", "*" , "http://ip.cn" ]

在这种情况下,*不需要引用,因为没有shell会将*扩展到当前目录中的文件,参数是直接传递给curl二进制文件。