环境:Ubuntu 16.04 LTS 64bit,Docker CE 1.38
配置方法
修改:/lib/systemd/system/docker.service
把ExecStart那行改成:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:想要开启的端口 -H unix:///var/run/docker.sock
保存,并重启服务:
sudo systemctl docker restart
然后就可以用curl或者浏览器进行测试
API文档(1.37版本):
Engine API
配置的时候遇到三个无效配置
1.修改 /usr/lib/systemd/system/docker.service
不知道是不是个例,我的服务器上/usr/lib/systemd下面根本没有system目录
2.修改 /etc/default/docker
说是添加DOCKER_OPTS = " -H=unix:///var/run/docker.sock -H=0.0.0.0:端口",然后重启服务就可以,但是实测无效
3.使用 systemctl edit docker.service
然后添加
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:端口
实测使用命令后打开的是空白文件,并且输入配置后,由于ExecStart重复配置还导致服务无法运行,并且无法重装或卸载,提示:
Failed to stop docker.service: Unit docker.service not loaded.
并且让我使用 systemctl status docker.service 查看服务状态
使用命令以后,根据显示的信息,找到了 /etc/systemd/system/docker.service.d/override.conf 文件(也就是保存刚刚添加的配置内容的文件),把这个文件清空,启动服务成功,恢复正常
API 测试(使用Postman或Chrome)
1.搜索镜像(java)
get /images/search?term=java
返回结果:
给出了搜索结果
2.查看container
get /containers/json
返回:
[
{
"Id": "9a84f2443f038050115140155c46f3c7791de4f92a6be300a50f1c6586c42369",
"Names": [
"/lucid_stonebraker"
],
"Image": "ubuntu",
"ImageID": "sha256:ea4c82dcd15a33e3e9c4c37050def20476856a08e59526fbe533cc4e98387e39",
"Command": "/bin/bash",
"Created": 1541509446,
"Ports": [],
"Labels": {},
"State": "running",
"Status": "Up 18 hours",
"HostConfig": {
"NetworkMode": "default"
},
"NetworkSettings": {
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "c26e32aa88e8ba869fff5332c3dafb865e1eafcadd12c1e99f217cbfaa77fc00",
"EndpointID": "ae4c138cc718ea87de95a0eb8b59dedc424907223282bfd10cfefa40bb72c2a3",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
},
"Mounts": []
}
]
3.停止container
post /container/{id}/stop
id就是上一步返回结果中的Id字段
成功后没有返回值,在putty中查询,结果如下:
ubuntu@VM-0-6-ubuntu:~$ sudo docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9a84f2443f03 ubuntu "/bin/bash" 18 hours ago Exited (0) About a minute ago lucid_stonebraker
说明该容器确实是被这次请求关闭的
安全问题
查询相关资料的时候,看到了一篇博文
Docker Remote Api未授权访问漏洞
提到了可以使用Docker挂载功能达到免密登录,推荐大家看看
我是使用腾讯云的入站规则进行防御,但是效果肯定有限,如果只是学习目的的话,推荐大家不使用Docker Rest API的时候关闭该功能,或者干脆停止docker服务