2015-04-19 12 views
9

我正在嘗試使用docker-compose up您可以使用docker run [APP_CONTAINER_NAME] [APP_OPTIONS]的方式。如何將命令行選項發送到我以「docker-compose up」開頭的dockerized程序?

+0

我真的不明白在Dockerfile命令將按照默認的參數傳遞給入口點發送到入口點問題 - 在docker-compose中,將參數放入docker-compose.yml文件中。這種方法對你有沒有問題? –

+0

@AdrianMouat是的,它不是理想的,因爲每次你想發送一個新的選項,你必須修改docker-compose.yml,重建並重新運行。我希望能夠在運行服務時將選項發送到我的程序,因爲我可以在運行帶有docker run的主容器時執行該服務,並在我的Dockerfile中使用ENTRYPOINT來實現此行爲。 – Donovan

回答

2

docker run被定義爲:

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...] 

雖然docker compose run被定義爲:

docker-compose run [options] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...] 

在這兩種情況下,最終ARGS(這可能是的 「APP_OPTIONS」 任擇議定書的問題)會被傳遞給容器命令。

請注意,docker run選項中的一些可以按原樣用於docker-compose run(其中一個爲-d,用於運行分離的容器命令),但不是全部。

+2

沒有辦法將ARGS放入docker-compose文件中嗎?在我的情況下,在命令行上傳遞它們太不穩定。 – dsteinkopf

+1

@dsteinkopf當然:使用'command'(https://docs.docker.com/compose/compose-file/#command),你可以覆蓋圖像默認命令,允許你重複圖像中定義的命令,但改變其參數。 – VonC

3

Docker Compose的要點是您不必記住所有的命令行開關。

如果你想改變不同上下文的環境變量,我建議你爲Compose創建一個基地common.yml文件。然後,您可以爲每個不同的上下文創建一個新的yml文件,並使用extends指令繼承common.yml文件。然後,您可以使用-f標誌到docker compose在上下文之間切換。

另請注意,如果您只是在yml中更改一個變量,並且您可以使用外部文件作爲環境變量(如果這對您更好),則Compose不應「重建」任何內容。

相關問題