在Mac OSX系統(tǒng)的Docker機(jī)上啟用Docker遠(yuǎn)程API功能
Docker守護(hù)進(jìn)程提供了一套遠(yuǎn)程REST API,具體可以參考文檔:
https://docs.docker.com/engine/reference/api/docker_remote_api/
這套API是提供給客戶端與Docker引擎通信時(shí)使用,這套API也可以由其他工具調(diào)用,比如curl或Chrome瀏覽器的Postman REST客戶端工具。
如果是在Mac OSX Mavericks系統(tǒng)上使用Docker機(jī)創(chuàng)建Docker守護(hù)進(jìn)程,那么要啟用Docker遠(yuǎn)程API功能需要一定的技巧。下面一一道來。
可以使用curl工具連接到安全的Docker端口,命令如下:
1
2
3
4
|
$ curl https: // $HOST:2376 /images/json --cert ~/.docker /cert .pem --key ~/.docker /key .pem --cacert ~/.docker /ca .pem |
此命令存在一定的問題。主要有:
1)命令可能不工作,因?yàn)槊恳粋€(gè)Docker機(jī)的證書存儲(chǔ)在.docker/machine/machines/目錄。
2)即使命令根據(jù)路徑做了修改,比如:
curl https://192.168.99.100:2376/images/json --cert $DOCKER_CERT_PATH/cert.pem --key $DOCKER_CERT_PATH/key.pem --cacert $DOCKER_CERT_PATH/ca.pem
執(zhí)行命令仍然會(huì)得到錯(cuò)誤信息:
curl: (58) SSL: Can't load the certificate "/Users/arungupta/.docker/machine/machines/couchbase/cert.pem" and its private key: OSStatus -25299
解決方法是需要更新curl工具。總的來說,最新版的curl工具使用了Apple的安全傳輸層API(Secure Transport API),取代了原先的OpenSSL API。這意味著證書必須是p12格式。
下面可以這樣修復(fù)命令:
1)進(jìn)入Docker機(jī)存放證書的目錄,比如.docker/machine/machines/couchbase目錄
2)生成*.p12格式的證書
1
2
3
4
5
6
7
8
|
openssl pkcs12 - export -inkey key.pem - in cert.pem -CAfile ca.pem -chain -name client-side -out cert.p12 -password pass:mypass |
現(xiàn)在可以調(diào)用REST API了:
curl https://192.168.99.100:2376/images/json --cert $DOCKER_CERT_PATH/cert.p12 --pass mypass --key $DOCKER_CERT_PATH/key.pem --cacert $DOCKER_CERT_PATH/ca.pem
注意,–cert參數(shù)現(xiàn)在指向了生成的p12證書,證書的密碼使用–pass參數(shù)進(jìn)行指定。
然后會(huì)得到如下結(jié)果:
1
2
3
|
[{ "Id" : "sha256:d38beda529d3274636d6cb1c9000afe4f00fbdcfa544140d6cc0f5d7f5b8434a" , "ParentId" : "" , "RepoTags" :[ "arungupta/couchbase:latest" ], "RepoDigests" :null, "Created" :1450330075, "Size" :374824677, "VirtualSize" :374824677, "Labels" :{}}] |
現(xiàn)在可以嘗試啟動(dòng)CouchBase服務(wù)器:
1
2
|
~ > docker run -d -p 8091-8093:8091-8093 -p 11210:11210 arungupta /couchbase 42d1414883affd0fbb272cb1378c2f6b5118acf3ed5cb60cbecdc42f95602e3e |
再調(diào)用另一個(gè)REST API來查看容器的細(xì)節(jié)內(nèi)容:
1
2
|
~ > curl https: //192 .168.99.100:2376 /containers/json --cert $DOCKER_CERT_PATH /cert2 .p12 --pass mypass --key $DOCKER_CERT_PATH /key .pem --cacert $DOCKER_CERT_PATH /ca .pem [{ "Id" : "42d1414883affd0fbb272cb1378c2f6b5118acf3ed5cb60cbecdc42f95602e3e" , "Names" :[ "/admiring_pike" ], "Image" : "arungupta/couchbase" , "ImageID" : "sha256:d38beda529d3274636d6cb1c9000afe4f00fbdcfa544140d6cc0f5d7f5b8434a" , "Command" : "/entrypoint.sh /opt/couchbase/configure-cluster.sh" , "Created" :1454850194, "Ports" :[{ "IP" : "0.0.0.0" , "PrivatePort" :8092, "PublicPort" :8092, "Type" : "tcp" },{ "PrivatePort" :11207, "Type" : "tcp" },{ "IP" : "0.0.0.0" , "PrivatePort" :11210, "PublicPort" :11210, "Type" : "tcp" },{ "PrivatePort" :18092, "Type" : "tcp" },{ "PrivatePort" :18091, "Type" : "tcp" },{ "IP" : "0.0.0.0" , "PrivatePort" :8093, "PublicPort" :8093, "Type" : "tcp" },{ "IP" : "0.0.0.0" , "PrivatePort" :8091, "PublicPort" :8091, "Type" : "tcp" },{ "PrivatePort" :11211, "Type" : "tcp" }], "Labels" :{}, "Status" : "Up 2 seconds" , "HostConfig" :{ "NetworkMode" : "default" }, "NetworkSettings" :{ "Networks" :{ "bridge" :{ "IPAMConfig" :null, "Links" :null, "Aliases" :null, "NetworkID" : "" , "EndpointID" : "6feaf4c1c70feaf0ba240ce55fb58ce83ebb84c8098bef9171998e84f607fa0b" , "Gateway" : "172.17.0.1" , "IPAddress" : "172.17.0.2" , "IPPrefixLen" :16, "IPv6Gateway" : "" , "GlobalIPv6Address" : "" , "GlobalIPv6PrefixLen" :0, "MacAddress" : "02:42:ac:11:00:02" }}}}] |
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的 支持!