Mac OSX系统 Docker启用Docker远程API功能

 更新时间:2016年10月20日 15:00:47   投稿:lqh  
这篇文章主要介绍了Mac OSX系统 Docker启用Docker远程API功能的相关资料,需要的朋友可以参考下

在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"}}}}]




感谢阅读,希望能帮助到大家,谢谢大家对本站的 支持!

相关文章

  • Docker创建一个mysql容器并保存为本地镜像

    Docker创建一个mysql容器并保存为本地镜像

    本篇文章主要介绍了Docker创建一个mysql容器并保存为本地镜像 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • docker仓库登录及配置insecure-registries的方法

    docker仓库登录及配置insecure-registries的方法

    这篇文章主要介绍了docker仓库登录配置insecure-registries的方法,docker客户端如果配置中添加了insecure-registary配置,就不需要在docker 客户端配置上对应证书,如果不配置要在/etc/docker/certs.d/目录中添加对应证书才能正常登录,感兴趣的朋友跟随小编一起看看吧
    2022-07-07
  • docker 编辑Dockerfile 添加php7.2 acpu的问题

    docker 编辑Dockerfile 添加php7.2 acpu的问题

    这篇文章主要介绍了docker 编辑Dockerfile 添加php7.2 acpu问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • 一文详解docker容器中的memory限制

    一文详解docker容器中的memory限制

    在Docker中,内存管理是非常重要的一部分,Docker提供了一些功能来管理容器的内存使用情况,其中包括内存限制、内存交换和内存统计等,本文给大家详细介绍了docker容器中的memory限制,需要的朋友可以参考下
    2024-04-04
  • docker在linux上的安装部署实例讲解

    docker在linux上的安装部署实例讲解

    这篇文章主要介绍了docker在linux上的安装部署实例讲解,步骤讲解的很清晰,有需要同学可以学习下
    2021-03-03
  • docker部署LNMP&phpMyAdmin的方法步骤

    docker部署LNMP&phpMyAdmin的方法步骤

    这篇文章主要介绍了docker部署LNMP&phpMyAdmin的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • docker如何查询指定名字的容器id

    docker如何查询指定名字的容器id

    要查询指定名字的Docker容器ID,可以使用命令 docker ps -a --filter "name=CONTAINER_NAME" -q,该命令将返回指定名称的容器ID,如果存在多个相同名称的容器,则返回所有这些容器的ID
    2025-03-03
  • Docker容器磁盘占满的一些情况汇总

    Docker容器磁盘占满的一些情况汇总

    这篇文章主要给大家介绍了关于Docker容器磁盘占满的一些情况,文中通过示例代码介绍的非常详细,对大家学习或者使用Docker具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • Ubuntu Docker 的安装部署及简单应用

    Ubuntu Docker 的安装部署及简单应用

    这篇文章主要介绍了Ubuntu Docker 的安装部署的相关资料,这里说明介绍了详细的步骤,需要的朋友可以参考下
    2016-10-10
  • docker之docker-machine用法详解

    docker之docker-machine用法详解

    这篇文章主要介绍了docker之docker-machine用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11

最新评论