Docker绑定Remote API端口

原创 2018年01月12日 14:51:45

Docker官方提供了Go、Python两种不同的SDK和HTTP形式的API,不熟悉Go语言,尝试了一下Python的SDK。Docker官方的Python SDK是针对2.x版本的,就直接在CentOS的Python2.7.5上进行了测试,可是却出现了错误:

# python
Python 2.7.5 (default, Aug  4 2017, 00:39:18) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import docker
/usr/lib/python2.7/site-packages/requests/__init__.py:80: RequestsDependencyWarning: urllib3 (1.22) or chardet (2.2.1) doesn't match a supported version!
  RequestsDependencyWarning)
>>>

第一条import竟然就出现了问题,考虑了项目的实际场景,决定暂时方式研究python API,改向HTTP API。

按照官网文档的说明,直接运行:

# curl --unix-socket /var/run/docker.sock http:/v1.35/containers/json?all=true
[{"Id":"af08e69d49be5db6caaf24e1509b69e07baea24f6ac7633b74e76bb3e88aa981","Names":["/boring_booth"],"Image":"demo:latest","ImageID":"sha256:a432acdcjkb22ac42819b9dd53b87930e9016b64eb0a63707f9698e1d90e8a6a","Command":"/bin/bash","Created":1515726419,"Ports":[],"Labels":{"build-date":"20171128","license":"GPLv2","name":"CentOS Base Image","vendor":"CentOS"},"State":"exited","Status":"Exited (0) 17 seconds ago","HostConfig":{"NetworkMode":"default"},"NetworkSettings":{"Networks":{"bridge":{"IPAMConfig":null,"Links":null,"Aliases":null,"NetworkID":"3125372fde203e6916bc96502ef5951670cbc558e4e0069cc51f8f05dc19a45f","EndpointID":"","Gateway":"","IPAddress":"","IPPrefixLen":0,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"MacAddress":"","DriverOpts":null}}},"Mounts":[]}]

很显然上面的命令形式,并不适合在远程使用HTTP调用,要想在远程使用,就需要暴露管理端口。修改/etc/docker/daemon.json(如果该文件不存在,就新建一个),增加hosts配置:

{
   "hosts": ["unix:///var/run/docker.sock", "0.0.0.0:4789"]
}

后面就指定了可以在主机任意IP上访问Docker的API,建议这里改为固定值,可以减少暴露,降低风险。然后重新启动docker服务。

# systemctl daemon-reload
# systemctl restart docker
# systemctl -l status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2018-01-12 14:22:13 CST; 6s ago
     Docs: https://docs.docker.com
 Main PID: 21991 (dockerd)
   Memory: 28.6M
   CGroup: /system.slice/docker.service
           ├─21991 /usr/bin/dockerd
           └─21998 docker-containerd --config /var/run/docker/containerd/containerd.toml

......
Jan 12 14:22:13 plouto-docker-host-01 systemd[1]: Started Docker Application Container Engine.
Jan 12 14:22:13 plouto-docker-host-01 dockerd[21991]: time="2018-01-12T14:22:13.397856641+08:00" level=info msg="API listen on 0.0.0.0:4789"
Jan 12 14:22:13 plouto-docker-host-01 dockerd[21991]: time="2018-01-12T14:22:13.397938735+08:00" level=info msg="API listen on /var/run/docker/sock"

从上面可以看出已经绑定了4789端口,下面换台可以访问该主机的另一台主机测试下:

# curl http://192.168.1.21:4789/containers/json?all=true
[{"Id":"af08e69d49be5db6caaf24e1509b69e07baea24f6ac7633b74e76bb3e88aa981","Names":["/boring_booth"],"Image":"demo:latest","ImageID":"sha256:a432acdcjkb22ac42819b9dd53b87930e9016b64eb0a63707f9698e1d90e8a6a","Command":"/bin/bash","Created":1515726419,"Ports":[],"Labels":{"build-date":"20171128","license":"GPLv2","name":"CentOS Base Image","vendor":"CentOS"},"State":"exited","Status":"Exited (0) 17 seconds ago","HostConfig":{"NetworkMode":"default"},"NetworkSettings":{"Networks":{"bridge":{"IPAMConfig":null,"Links":null,"Aliases":null,"NetworkID":"3125372fde203e6916bc96502ef5951670cbc558e4e0069cc51f8f05dc19a45f","EndpointID":"","Gateway":"","IPAddress":"","IPPrefixLen":0,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"MacAddress":"","DriverOpts":null}}},"Mounts":[]}]
版权声明:原创文章,欢迎转载,转载请注明出处和原文链接

docker集群管理工具kubernetes初步搭建

前言:Kubernetes 是Google开源的容器集群管理系统,它构建于docker技术之上,基于Docker构建一个容器的调度服务,提供资源调度、均衡容灾、服务注册、动态扩缩容等功能套件,本质上可...
  • jay763836801
  • jay763836801
  • 2016年09月24日 09:38
  • 717

Docker django 部署

Docker django 部署 最近研究了一下如何用docker 打包django后台程序,记录一下踩到的坑,留给自己以后查看,如有错误欢迎各位大神指正。 这里记录一下最简单的,只是打包一个dj...
  • anonymous_qsh
  • anonymous_qsh
  • 2018年01月13日 11:37
  • 16

docker sdk 实践(windows、ubuntu、macOS)

docker sdk 实践(windows、ubuntu、macOS) 此处将分别介绍windows、linux(Ubuntu)、macOS下docker SDK的使用实践(代码使用python,其他...
  • ssrc0604hx
  • ssrc0604hx
  • 2017年11月17日 11:56
  • 163

Docker on Google App Engine

  • 2014年06月27日 11:25
  • 1.61MB
  • 下载

使用golang进行docker api开发

一 Docker 命令: 使用docker可直接进行docker 命令,如 docker build .等等 二 Docker Remote Api 也可以通过remote api的方式来进行交...
  • u014071426
  • u014071426
  • 2017年11月29日 22:18
  • 147

docker动态映射运行的container端口

docker动态映射运行的container端口 2016-01-26 docker自带了EXPOSE命令,可以通过编写dockerfile加-p参数方便的映射container内部端口,但是对于已...
  • ztguang
  • ztguang
  • 2016年05月14日 08:21
  • 5728

使用IDEA编写Python程序,插件安装python插件,安装python SDK运行Python程序

1、创建任意一类项目,比如Maven项目 2、手动编写一个test.py的文件。 3、将test.py的文件放到src目录下。 4、在IDEA的编辑器中会提示Install plugin.(直接...
  • toto1297488504
  • toto1297488504
  • 2017年07月14日 18:11
  • 681

python 资源大全

转载地址:https://my.oschina.net/u/2306127/blog/639345 Awesome Python Environment Management    环境管...
  • yang889999888
  • yang889999888
  • 2017年07月12日 17:09
  • 159

关于docker容器的监控

1 docker inspect [容器ID | 镜像ID] 查看容器创建时间、容器的IP、映射的端口、挂载的目录等信息。 此命令同样也能用来查看镜像的详细信息。2 docker stats 容器...
  • felix_yujing
  • felix_yujing
  • 2017年03月20日 16:14
  • 733

Docker RestApi 的配置及使用

1.前言 Docker 作为目前最流行的容器技术,引来了很多科技公司的追捧,而且国内外也出现了不少以Docker作为技术核心的创业公司。DaoCloud 公司推出的基于Docker的云服务已经让Do...
  • afandaafandaafanda
  • afandaafandaafanda
  • 2016年01月30日 16:57
  • 2388
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Docker绑定Remote API端口
举报原因:
原因补充:

(最多只允许输入30个字)