2017-05-26 69 views
3

我創建了一個集裝箱碼頭工人。這應該給了以下內容:參數傳遞到泊塢容器

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 

我有損失 「!」

回答

4

你的問題可能從你的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的實現 –

1

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

謝謝你,我理解你的榜樣是如何工作的,但它無助於解決任何方式我的問題,我需要插入在輸出線的中間傳遞的參數:「你好!」 –

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

作弊)))))有趣的是,類型的輸出線:‘文本文本’ –