2017-05-31 68 views
0

我試圖通過Docker Engine APIcURL在運行的碼頭集裝箱中執行命令。我正在關注instructions in the API doc
首先I create an exec instance並作爲響應我收到創建的exec的ID。
然後我用這個ID,當我嘗試send a request to start此exec,它看起來如下:Docker API - 執行開始返回「頁未找到」

$ curl --unix-socket /var/run/docker.sock -H "Content-Type: application/json" -x POST "http:/v1.29/exec/myExecID/start" 

但是從該請求的響應是:

{"message":"page not found"} 

這是我的碼頭工人版本:

Client: 
Version:  17.05.0-ce 
API version: 1.29 
Go version: go1.7.5 
Git commit: 89658be 
Built:  Thu May 4 22:10:54 2017 
OS/Arch:  linux/amd64 

Server: 
Version:  17.05.0-ce 
API version: 1.29 (minimum version 1.12) 
Go version: go1.7.5 
Git commit: 89658be 
Built:  Thu May 4 22:10:54 2017 
OS/Arch:  linux/amd64 
Experimental: false 

code in the Moby's repository中,他們調用完全相同的地址。

其他人曾經遇到過這個問題嗎?如果你分享你的經驗,我會很高興。

+0

你在URL中有http:// localhost。看起來您正在調用主機上的某個Web服務器而不是Docker引擎API。 – vempo

+0

是的,對不起,我剛剛解決了我的問題。問題是,這兩種方式它不工作:) –

回答

0

也許是因爲你沒有包含請求體是這樣的:

-d '{"Detach": false, "Tty": false}' 

如果你甚至可以像下面的錯誤:

{"message":"No such exec instance '<ID>' found in daemon"} 

這意味着你沒有爲創建一個實例EXEC。如果是這樣,你需要創建一個新的實例

curl --unix-socket /var/run/docker.sock -H "Content-Type: application/json" \ 
-d '{"AttachStdin": false, "AttachStdout": true, "AttachStderr": true, "DetachKeys": "ctrl-p,ctrl-q", "Tty": false, "Cmd": ["date"], "Env": ["FOO=bar", "BAZ=quux"]}' \ 
-X POST http:/v1.29/containers/fafe141c1a2b/exec 

輸出(例如):

{"Id":"70f08c296d460d2fe254ecd0f8e0416777a6b938bb74a325ffc76405d33d3526"} 

是那麼你可以做Exec之後,如下圖所示:

curl --unix-socket /var/run/docker.sock -H "Content-Type: application/json" \ 
-d '{"Detach": false, "Tty": false}' \ 
-X POST http:/v1.29/exec/70f08c296d460d2fe254ecd0f8e0416777a6b938bb74a325ffc76405d33d3526/start 

我已經嘗試這種方式,它的工作原理,希望可以幫助!

+0

是的,這是因爲我沒有包括請求正文,我認爲這不是必需的。 –