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":[]}]
版权声明:原创文章,欢迎转载,转载请注明出处和原文链接 https://blog.csdn.net/mydeman/article/details/79044015

TensorFlow API攻略

随着人工智能的复兴,特别是阿法狗在围棋界轻松碾压所有人类棋手时,我们在惊奇它的神奇,它的高智慧,更好奇它的来源,以及它的实现原理,以及它的实际运行过程,那么你需要学习这个课程。TensorFlow是将复杂的数据结构传输至人工智能神经网中进行分析和处理过程的系统,如果你想快捷、熟练地使用它来开发人工智能的程序,那么你需要学习它的API使用,才可以使用TensorFlow这个平台高效地工作。
  • 2017年03月20日 14:25

Docker 开启远程访问API

加入DOCKER_OPTS="-H=unix:///var/run/docker.sock -H=0.0.0.0:6732" ubuntu的位置:/etc/default/docker c...
  • liu306487103
  • liu306487103
  • 2016-08-16 15:56:45
  • 3186

docker 远程连接

docker默认通讯方式只支持本地形式调用,不支持TCP远程,如何增加docker支持通过TCP方式管理docker,可通过配置文件形式,各个版本的方式配置不同,以下会针对某一个版本进行演示。使用说明...
  • dounine
  • dounine
  • 2017-07-07 14:36:41
  • 2371

Centos7中docker开启远程访问(Centos7 docker remote access configure)

首先,centos中docker的配置不同于ubuntu,在centos中没有/etc/default/docker,另外在centos7中也没有找到/etc/sysconfig/docke这个配置文...
  • farYang
  • farYang
  • 2017-07-24 00:10:35
  • 5356

docker远程api的使用

简介: Docker Remote API是指docker团队为了远程管理docker,允许通过unix socket通信操作Docker daemon,我们也可以通过HTTP调用其Rest API...
  • mr_zhang2014
  • mr_zhang2014
  • 2017-12-11 15:18:19
  • 209

Docker Remote Api未授权访问漏洞

一. 漏洞原因 dockerd -H unix:///var/run/docker.sock -H 0.0.0.0:2375 docker守护进程监听在0.0.0.0,外网可访问 3, 没有使用ipt...
  • sethcss
  • sethcss
  • 2017-06-17 23:31:19
  • 653

Docker Remote API 初步尝试

1、首先是安装 docker 这里就不说了 2、查看一下 docker api的版本 >sudo docker version Client:  Version:      1.10....
  • sccs999
  • sccs999
  • 2016-03-04 15:10:04
  • 821

Docker 1.12新功能探索(8):Remote Api 1.24

Docker的Remote Api并不是1.12才有的,Docker1.12的Remote Api升到了1.24。Remote api的使用在1.12中没有大的变化,稍微大一点的变化是到这个版本之后,...
  • liumiaocn
  • liumiaocn
  • 2016-08-22 21:06:03
  • 2503

8 Docker Remote API

Docker Remote API 是将会用来取代 Docker 命令的工具。本文将会用 curl 操作 Docker Remote API。 准备: 示例系统是 Ubuntu,配置文件在 /et...
  • xiaoliuliu2050
  • xiaoliuliu2050
  • 2016-12-03 14:32:31
  • 847

python-Not uninstalling at /usr/lib/python2.7/dist-packages, owned by OS

前提通常使用pip install xxx 来安装某一库。使用 pip uninstall xxx 来卸载。而pip 的也可以采用常见的两种安装方法在centos系列下 使用sudo yum in...
  • sinat_21302587
  • sinat_21302587
  • 2017-07-04 00:19:47
  • 9145
收藏助手
不良信息举报
您举报文章:Docker绑定Remote API端口
举报原因:
原因补充:

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