参数传递到泊坞容器

问题描述:

我创建了一个集装箱码头工人。这应该给了以下内容:参数传递到泊坞容器

docker run --rm container1 
> Hello World! 

docker run --rm container1 Bob 
> Hello Bob! 

我Dockerfile:

FROM ubuntu:14.04 
ENTRYPOINT ["/bin/echo", "Hello"] 
CMD ["World!"] 

我的输出:

docker run --rm container1 
> Hello World! 

docker run --rm container1 Bob 
> Hello Bob 

我有损失 “!”

你的问题可能从你的Ubuntu做字符串连接的垫层不理解现身壳

$ echo "Hello" "I" "am" "a" "developer" 
Hello I am a developer 

这工作,因为shell不有一个串联运算符。所以实际上用字符串喂回声会使得所有这些字符串连接起来,这里没有真正的黑魔法,并且据我所知,这些字符串按照它们传递给echo的顺序连接在一起。

现在你真正想在这里实现可以很容易地与printf做到这一点可以从参数substitue格式:约printf的替代

printf 'Hello %s!' 'Bob' 
> Hello Bob! 

更多信息可以发现there

因此,如果您Dockerfile是:

FROM ubuntu:14.04 
ENTRYPOINT ["printf", "Hello %!"] 
CMD ["World"] 

你会得到你预期的结果。

$ cat Dockerfile 
FROM ubuntu:14.04 
ENTRYPOINT ["printf", "Hello %s!"] 
CMD ["World"] 

$ docker build -t demo . 

$ docker run --rm demo Bob 
Hello Bob! 
+0

我不知道,有在shell printf的实现 –

CMD:

一个CMD的主要目的是提供一种用于一个执行容器提供默认值。这些默认值可以包含可执行文件,或者可以省略可执行文件,在这种情况下,您还必须指定ENTRYPOINT指令。

入口点:

运行到不覆盖其在图像中指定的可执行容器。使用ENTRYPOINT会发出一个强烈的消息,表明这个容器只用于运行这一个命令。

因此,在你的情况,当你运行:

docker run --rm container1 Bob 

的CMD被替换字符串鲍勃,因此结果。

可以有只有一个CMD指令在Dockerfile。如果您列出多个CMD,则只有最后一个CMD的才会生效。

希望这会有所帮助。

更多关于ENTRYPOINTCMD

编辑:添加一个基本的例子来演示如何从命令行参数。

#cat Dockerfile 
FROM ubuntu:14.04 

ENTRYPOINT ["/bin/ping"] 

在上述搬运工文件的命令(CMD),以执行具有不mentioned.It指示容器预计一些参数在启动时。

docker run --dns=172.24.100.50 -it stack:2.0 -c 1 google.com 
PING google.com (216.58.197.78) 56(84) bytes of data. 
64 bytes from maa03s21-in-f14.1e100.net (216.58.197.78): icmp_seq=1 ttl=54 time=68.2 ms 

--- google.com ping statistics --- 

1 packets transmitted, 1 received, 0% packet loss, time 0ms 

同样可以通过添加paramters成使用CMD,如下dockerfile来实现::

cat Dockerfile 
FROM ubuntu:14.04 

ENTRYPOINT ["/bin/ping"] 

CMD ["-c", "1", "google.com"] 

现在运行容器而不providig而一个PARAMATERS它可以通过如下面的命令行来提供起始:

docker run --dns=172.24.100.50 stack:4.0 
PING google.com (216.58.197.78) 56(84) bytes of data. 
64 bytes from maa03s21-in-f78.1e100.net (216.58.197.78): icmp_seq=1 ttl=54 time=50.0 ms 

--- google.com ping statistics --- 
1 packets transmitted, 1 received, 0% packet loss, time 0ms 

编辑2:

如果你正在寻找具体,那么你就可以作为

docker run --rm container1 Bob! 

,因为我知道没有选择,因为你需要之间插入运行容器据。

+0

不,它并不能帮助(((我读过的一切,我不明白如何从命令行运行泊坞窗使用参数容器内 –

+0

您能查看now..added更多。使用例如信息 –

+0

谢谢你,我理解你的榜样是如何工作的,但它无助于解决任何方式我的问题,我需要插入在输出线的中间传递的参数:“你好!” –

这是正常的

当您启动

docker run --rm container1

它使用命令

echo

的说法

World !

当您添加

Bob

它由

Bob

看到取代

World!

What is the difference between CMD and ENTRYPOINT in a Dockerfile?

更多细节

参见

https://hub.docker.com/r/k3ck3c/nethogs/

它监控默认为wlan0,但如果你想监控说eth0的,你只是在最后添加的eth0的

docker run

命令,并为wlan0(默认值)将eth0来取代

+0

它没有帮助(((我读过的一切,我不明白如何从容器内的命令行运行泊坞窗使用参数 –

+0

尝试'搬运工运行--rm container1” !鲍勃“' – user2915097

+0

作弊)))))有趣的是,类型的输出线:‘文本文本’ –