我创建了一个集装箱码头.哪个应该给出以下内容:
docker run --rm container1
> Hello World!
docker run --rm container1 Bob
> Hello Bob!
Run Code Online (Sandbox Code Playgroud)
我的Dockerfile:
FROM ubuntu:14.04
ENTRYPOINT ["/bin/echo", "Hello"]
CMD ["World!"]
Run Code Online (Sandbox Code Playgroud)
我的输出:
docker run --rm container1
> Hello World!
docker run --rm container1 Bob
> Hello Bob
Run Code Online (Sandbox Code Playgroud)
我有一个损失"!"
你的问题可能来自你的Ubuntu shell完成的字符串连接的底层不理解
$ echo "Hello" "I" "am" "a" "developer"
Hello I am a developer
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为shell没有连接运算符.因此,实际上用字符串提供echo将使echo所有这些字符串连接在一起,其中没有真正的黑魔法,并且据我所知,字符串按它们传递的顺序连接起来echo.
现在你真正想要实现的目标可以轻松完成printf,可以从参数中替换一种格式:
printf 'Hello %s!' 'Bob'
> Hello Bob!
Run Code Online (Sandbox Code Playgroud)
有关printf替换的更多信息可以在那里找到.
所以如果你的意思Dockerfile是:
FROM ubuntu:14.04
ENTRYPOINT ["printf", "Hello %s!"]
CMD ["World"]
Run Code Online (Sandbox Code Playgroud)
您将获得预期的结果.
$ cat Dockerfile
FROM ubuntu:14.04
ENTRYPOINT ["printf", "Hello %s!"]
CMD ["World"]
$ docker build -t demo .
$ docker run --rm demo
Hello World!
$ docker run --rm demo Bob
Hello Bob!
Run Code Online (Sandbox Code Playgroud)
CMD:
CMD的主要目的是为执行容器提供默认值.这些默认值可以包含可执行文件,也可以省略可执行文件,在这种情况下,您还必须指定ENTRYPOINT指令.
入口点 :
运行容器以不覆盖映像中指定的可执行文件.使用ENTRYPOINT会发出一条强烈的消息,即此容器仅用于运行此命令.
因此,在您运行的情况下:
docker run --rm container1 Bob
Run Code Online (Sandbox Code Playgroud)
CMD被字符串Bob替换,因此结果被替换.
有可能只是在Dockerfile一个CMD指令.如果列出多个CMD,则只有最后一个CMD才会生效.
希望这可以帮助.
有关ENTRYPOINT和CMD的更多信息
编辑:添加一个基本示例来演示如何从命令行获取参数.
#cat Dockerfile
FROM ubuntu:14.04
ENTRYPOINT ["/bin/ping"]
Run Code Online (Sandbox Code Playgroud)
在上面的docker文件中,没有提到要执行的命令(CMD).它表示容器在启动时需要一些参数.它可以通过命令行提供,如下所示:
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
Run Code Online (Sandbox Code Playgroud)
通过使用CMD将参数添加到dockerfile中可以实现相同的目的,如下所示:
cat Dockerfile
FROM ubuntu:14.04
ENTRYPOINT ["/bin/ping"]
CMD ["-c", "1", "google.com"]
Run Code Online (Sandbox Code Playgroud)
现在运行容器而不启动参数,同时启动:
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
Run Code Online (Sandbox Code Playgroud)
编辑2:
如果您正在寻找具体的,那么您可以将容器作为
docker run --rm container1 Bob!
Run Code Online (Sandbox Code Playgroud)
据我所知,没有选项可以根据需要插入.
| 归档时间: |
|
| 查看次数: |
13163 次 |
| 最近记录: |