参数传递到泊坞容器
我创建了一个集装箱码头工人。这应该给了以下内容:参数传递到泊坞容器
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!
CMD:
一个CMD的主要目的是提供一种用于一个执行容器提供默认值。这些默认值可以包含可执行文件,或者可以省略可执行文件,在这种情况下,您还必须指定ENTRYPOINT指令。
入口点:
运行到不覆盖其在图像中指定的可执行容器。使用ENTRYPOINT会发出一个强烈的消息,表明这个容器只用于运行这一个命令。
因此,在你的情况,当你运行:
docker run --rm container1 Bob
的CMD被替换字符串鲍勃,因此结果。
可以有只有一个CMD指令在Dockerfile。如果您列出多个CMD,则只有最后一个CMD的才会生效。
希望这会有所帮助。
更多关于ENTRYPOINT和CMD
编辑:添加一个基本的例子来演示如何从命令行参数。
#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!
,因为我知道没有选择,因为你需要之间插入运行容器据。
不,它并不能帮助(((我读过的一切,我不明白如何从命令行运行泊坞窗使用参数容器内 –
您能查看now..added更多。使用例如信息 –
谢谢你,我理解你的榜样是如何工作的,但它无助于解决任何方式我的问题,我需要插入在输出线的中间传递的参数:“你好!
这是正常的
当您启动
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来取代
它没有帮助(((我读过的一切,我不明白如何从容器内的命令行运行泊坞窗使用参数 –
尝试'搬运工运行--rm container1” !鲍勃“' – user2915097
作弊)))))有趣的是,类型的输出线:‘文本
我不知道,有在shell printf的实现 –