Docker Remote API 如何使用?
docker 的 Remote API 定義如下:
這個API看著是http協議的但是我用 curl http://127.0.0.1:4243/containers/json 這個命令卻什麼也得不到,我從網上另外搜到的命令 echo -e "GET /images/json HTTP/1.0
" | nc -U /var/run/docker.sock 可以得到所有容器的信息,我想知道如果是 http 協議的介面的話為什麼用 curl 得不到數據?
Docker Remote API是一個取代遠程命令行界面(rcli)的REST API。本文中,我們將使用命令行工具cURL來處理url相關操作。cURL可以發送請求、獲取以及發送數據、檢索信息。具體內容你可以看看這篇文章:Docker入門教程(八)Docker Remote API
你要把 docker daemon 綁定到該埠上。默認情況下,docker daemon使用unix socket(unix:///var/run/docker.sock)先停止docker daemon再重新啟動:
service docker stop
docker -d -H unix:///var/run/docker.sock -H 0.0.0.0:4243
之後就可以:
curl http://127.0.0.1:4243/containers/json
-----更新----
填坑來了,現在使用docker作為開發環境,操作系統是ubuntu16.10,pycharm中使用remote interpreter,需要用到remote api,結果發現自己的原答案是針對ubuntu 14.04的,ubuntu15及以上版本的可參見Control and configure Docker with systemd,說說主要用到的幾個命令:
-----原答案----docker官方文檔上有相關說明(Configure and run Docker on various distributions),ubuntu上是可行的# 查看配置文件位於哪裡
systemctl show --property=FragmentPath docker #編輯配置文件內容,接收所有ip請求sudo gedit /lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376#重新載入配置文件,重啟docker daemon sudo systemctl daemon-reloadsudo systemctl restart docker
sudo vi /etc/default/docker
DOCKER_OPTS="-H tcp://0.0.0.0:2375"
也可以不通過配置,直接用這種方式啟動,這種方式不是以守護式的方式啟動服務的,但是可以通過nohup命令掛起
docker daemon -H=0.0.0.0:2375
在win平台上好像目前還不支持docker通過http訪問,不過可以通過tcp訪問(我使用pycharm可以直接連接docker的服務端)
在centos7.2下,可以進行這樣的操作:
直接在ExecStart=/usr/bin/dockerd後面增加需要的啟動參數即可。我這裡增加了DockerHub鏡像加速地址和開啟了tcp連接(--registry-mirror=https://xxoo.mirror.acs.aliyun.com -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock)vim /etc/systemd/system/docker.serviceExecStart=/usr/bin/dockerd --registry-mirror=https://xxoo.mirror.acs.aliyun.com -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
systemctl daemon-reload
systemctl restart docker1 修改配置文件
CentOS6:
/etc/sysconfig/docker
添加一行: DOCKER_OPTS=-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
CentOS7:
/usr/lib/systemd/system/docker.service
修改一行:ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
2. 重啟Docker
CentOS6: service docker restart
CentOS7:
systemctl daemon-reload
systemctl restart docker.service
3. 測試
在本機 curl http://127.0.0.1:2375/info
在其他機器上:curl http://hostanme:2375/info
*此時本地client可以繼續通過Unix sock與docker daemon通行
例如:docker info 命令繼續有效。
這裡還有一個問題,curl如果想直接與unix socket通信的話,需要添加命令選項,具體你可以查下。
默認以文件socket方式啟動docker的,改成tcp的就可以了
推薦閱讀:
※基於OSS搭建私有(跨區域)Docker鏡像倉庫
※把docker鏡像當作桌面系統來用
※Docker 重要更新: 原生支持多階段構建(multi-stage build)
※Docker Remote API 開發(一)
※docker的幾點疑問?
TAG:Docker |