在Mac OSX系统的Docker机上启用Docker远程API功能
Docker守护进程提供了一套远程REST API,具体可以参考文档:
https://docs.docker.com/engine/reference/api/docker_remote_api/
这套API是提供给客户端与Docker引擎通信时使用,这套API也可以由其他工具调用,比如curl或Chrome浏览器的Postman REST客户端工具。
如果是在Mac OSX Mavericks系统上使用Docker机创建Docker守护进程,那么要启用Docker远程API功能需要一定的技巧。下面一一道来。
可以使用curl工具连接到安全的Docker端口,命令如下:
$ curl https://$HOST:2376/images/json --cert ~/.docker/cert.pem --key ~/.docker/key.pem --cacert ~/.docker/ca.pem
此命令存在一定的问题。主要有:
1)命令可能不工作,因为每一个Docker机的证书存储在.docker/machine/machines/目录。
2)即使命令根据路径做了修改,比如:
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
执行命令仍然会得到错误信息:
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格式。
下面可以这样修复命令:
1)进入Docker机存放证书的目录,比如.docker/machine/machines/couchbase目录
2)生成*.p12格式的证书
openssl pkcs12 -export -inkey key.pem -in cert.pem -CAfile ca.pem -chain -name client-side -out cert.p12 -password pass:mypass
现在可以调用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参数现在指向了生成的p12证书,证书的密码使用–pass参数进行指定。
然后会得到如下结果:
[{"Id":"sha256:d38beda529d3274636d6cb1c9000afe4f00fbdcfa544140d6cc0f5d7f5b8434a","ParentId":"", "RepoTags":["arungupta/couchbase:latest"],"RepoDigests":null,"Created":1450330075,"Size":374824677, "VirtualSize":374824677,"Labels":{}}]
现在可以尝试启动CouchBase服务器:
~ > docker run -d -p 8091-8093:8091-8093 -p 11210:11210 arungupta/couchbase 42d1414883affd0fbb272cb1378c2f6b5118acf3ed5cb60cbecdc42f95602e3e
再调用另一个REST API来查看容器的细节内容:
~ > 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"}}}}]
感谢阅读,希望能帮助到大家,谢谢大家对本站的 支持!
问题内容: 我似乎无法弄清楚如何在使用boot2docker时启用远程API。我正在尝试使用dockerode,如下所示: 尽管存在ID为“”的容器,但数据为null。我怀疑这是因为OS X主机上没有/var/run/docker.sock,因此我需要使用类似以下内容: …但是无法弄清楚如何在VirtualBox VM中配置boot2docker或docker以启用通过http或tcp的访问。 问
问题内容: 我试图按 链接中 所述配置 Docker守护程序端口 : 我启用了 调试日志 来检查启动Docker服务的问题,并从以下位置的日志中了解到: 是什么 导致Docker容器启动的问题? 配置文件有问题吗? 建议更改后的问题: 错误: 所以我将其更改为: 和调试日志: 现在, Docker容器正在等待无限期。 是什么导致此问题? 能够通过dockerd手动启动: 问题答案: 这是Dan L
问题内容: 我在Docker远程API文档中看到可以使用filter来过滤状态,但是我不确定如何形成请求: https://docs.docker.com/reference/api/docker_remote_api_v1.16/#list- containers 应该如何设置其格式以仅显示退出的容器? 问题答案: jwodder在过滤器上是正确的,但是由于我不熟悉Go数据类型,所以我想逐步进行
问题内容: 我是Docker的新手。我已经阅读了docker remote API中的教程。在创建容器方面。它显示了太多无法填充的参数。我想知道什么等效于此命令: docker run -d -p 5000:5000 –restart =始终–name注册表注册表:2。 我对此一无所知。谁能告诉我?谢谢! 问题答案: 原始答案(2015年7月): 如本教程所述(如果启用了远程API的话)(不直接测
我刚开始使用Docker Desktop for Windows。当我尝试hello world示例时,我遇到了一个错误,如下所示。更新 下面是我遵循的步骤: 1已安装Docker for Windows,稳定版本 2 Hyper-V和虚拟化都已在我的Windows 10上启用 但是,切换到Linux容器时会出现以下错误: 发生错误。必须在BIOS中启用硬件辅助虚拟化和数据执行保护。请参阅http
问题内容: 假设我有一个要运行的Docker容器,那么我可以调用 一切都很好。如果系统崩溃并重新启动,是否有内置的方式来运行容器,使其能够自动重新启动? 如果是这样,这在Docker Compose中也可用吗? 问题答案: 是的,docker具有重启策略,该策略可以处理此问题。这也可以在compose.yml配置文件中找到。