假設碼頭集裝箱已經運行'碼頭運行',然後停止'碼頭停止'。 「碼頭啓動」之後會執行「CMD」命令嗎?'docker start'是否執行CMD命令?
回答
我相信@jripoll不正確,它似乎運行,這是第一次運行與docker run
上docker start
過的命令。
這裏有一個簡單的例子來測試:
首先創建一個shell腳本來運行名爲tmp.sh
:
echo "hello yo!"
然後運行:
docker run --name yo -v "$(pwd)":/usr/src/myapp -w /usr/src/myapp ubuntu sh tmp.sh
,將打印hello yo!
。
現在再次啓動它:
docker start -ia yo
它將每次運行那個時候再次打印。
不,只有在執行'docker run'才能運行基於圖像的容器時,纔會執行CMD命令。
在文檔中: 當以shell或exec格式使用時,CMD指令設置當運行圖像時要執行的命令。
當你做碼頭工人開始,你叫api/client/start.go
,這就要求:
cli.client.ContainerStart(containerID)
這就要求engine-api/client/container_start.go
:
cli.post("/containers/"+containerID+"/start", nil, nil, nil)
的碼頭工人守護進程API調用daemon/start.go
:
container.StartMonitor(daemon, container.HostConfig.RestartPolicy)
容器監視器在012中運行容器:
m.supervisor.Run(m.container, pipes, m.callback)
默認情況下,碼頭工人守護進程是這裏的主管,在daemon/daemon.go:
daemon.execDriver.Run(c.Command, pipes, hooks)
而且execDriver創造了daemon/execdriver/windows/exec.go
命令行:
createProcessParms.CommandLine, err = createCommandLine(processConfig, false)
使用的processConfig.Entrypoint
andprocessConfig.Arguments
in daemon/execdriver/windows/commandlinebuilder.go
:
// Build the command line of the process
commandLine = processConfig.Entrypoint
logrus.Debugf("Entrypoint: %s", processConfig.Entrypoint)
for _, arg := range processConfig.Arguments {
logrus.Debugf("appending %s", arg)
if !alreadyEscaped {
arg = syscall.EscapeArg(arg)
}
commandLine += " " + arg
}
那些ProcessConfig.Arguments
被填充在daemon/container_operations_windows.go
:
processConfig := execdriver.ProcessConfig{
CommonProcessConfig: execdriver.CommonProcessConfig{
Entrypoint: c.Path,
Arguments: c.Args,
Tty: c.Config.Tty,
},
,與c.Args
是一個容器的參數(runtile參數或CMD
)
所以肯定的, 'CMD
' 的命令是在'docker start
'後執行。
如果您希望您的容器每次都運行相同的可執行文件,那麼您應該考慮將ENTRYPOINT
與CMD
結合使用。
注意:不要混淆RUN
和CMD
。 RUN實際上運行一個命令並提交結果; CMD
在構建時不執行任何操作,但指定圖像的預期命令。
- 1. 多執行命令的Docker CMD exec-form
- 2. C#執行cmd命令
- 3. 的Java執行cmd命令
- 4. 從vb.net執行CMD命令
- 5. C++執行CMD命令
- 6. 遠程docker命令執行
- 7. 如何在cmd中鏈接START命令?
- 8. 使用python執行CMD命令
- 9. 在cmd上執行兩個命令
- 10. 在Windows 8中執行cmd命令c#?
- 11. 如何從c#執行cmd命令#
- 12. cmd命令不執行在C#
- 13. 在JSF中執行Cmd命令
- 14. java - 用於執行cmd命令的庫
- 15. 如何使用QProcess執行cmd命令?
- 16. 從Java執行Cmd命令時出錯?
- 17. 如何在java中執行cmd命令?
- 18. 從python執行DevCon CMD命令
- 19. 使用C#執行CMD命令
- 20. 在代碼中執行CMD命令
- 21. 執行命令,管理員通過CMD
- 22. VBScript管理CMD命令遠程執行
- 23. 從python程序執行cmd命令
- 24. 執行帶參數的cmd命令
- 25. 如何通過java執行cmd命令
- 26. C#執行cmd命令不起作用
- 27. 使用PHP來執行cmd命令
- 28. Golang爲CMD執行cd命令
- 29. 在cmd中執行多個命令?
- 30. 執行命令
檢查這個問題:CMD和入口點在Dockerfile之間的區別是什麼?(http://stackoverflow.com/q/21553353/4677231)爲了解大'CMD','入口點' – sEpmein 2015-03-28 13:00:43