Skip to content

Commit e792a8d

Browse files
committed
doc: Update README.md
1 parent 191af30 commit e792a8d

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed

README.md

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -513,6 +513,71 @@ docker container stop registry && docker container rm -v registry
513513

514514
[部署 registry 管理工具 Harbor](docker/harbor.md)
515515

516+
## Docker REST API
517+
518+
`Docker` 不仅可以通过本地命令行 `docker` 命令进行调用,还可以通过开启远程控制 `API`,使用 `HTTP` 调用接口来进行访问,远程控制 `Docker Daemon` 来做很多操作。`Docker` 的远程 `API` 服务默认监听的是 TCP `2375` 端口,为了保证安全,Docker 安装后默认不会启用远程 `API` 服务,因为这个服务默认不做权限认证。
519+
520+
### CentOS
521+
522+
CentOS 的开启方法比较简单,先修改配置:
523+
524+
```shell
525+
vim /usr/lib/systemd/system/docker.service
526+
```
527+
528+
修改 `ExecStart` 配置项,默认如下:
529+
530+
```shell
531+
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
532+
```
533+
534+
增加一个 `-H tcp://0.0.0.0:2375` 选项
535+
536+
```shell
537+
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 --containerd=/run/containerd/containerd.sock
538+
```
539+
540+
如果是内网生产环境,也可以将 `0.0.0.0` 改为内网 IP。同样的,`2375` 端口也可以修改。
541+
542+
但是这样可能还有一个问题,无法在命令行使用 `docker` 命令了,还需要添加 `sock` 选项:`-H unix:///var/run/docker.sock`,最后为:
543+
544+
```shell
545+
ExecStart=/usr/bin/dockerd -H fd:// -H unix:///var/run/docker.sock -H tcp://10.105.3.115:2375 --containerd=/run/containerd/containerd.sock
546+
```
547+
548+
修改完配置之后需要重启 Docker 服务:
549+
550+
```bash
551+
systemctl daemon-reload
552+
systemctl restart docker
553+
```
554+
555+
重启完成后,可以使用 netstat 查看端口是否监听来确认是否成功:
556+
557+
```bash
558+
[root@VM-3-115-centos ~]# netstat -nutlp | grep 2375
559+
tcp 0 0 10.105.3.115:2375 0.0.0.0:* LISTEN 32316/dockerd
560+
```
561+
562+
### MacOS
563+
564+
在 Mac 下无法直接修改配置文件来开启远程 API 服务,后来在 [`docker/for-mac`](https://github.com/docker/for-mac)[`issue`](https://github.com/docker/for-mac/issues/770) 中得到了解决方案。
565+
566+
可以运行一个 [`socat`](https://hub.docker.com/r/bobrik/socat) 容器,将 `unix socket` 上的 Docker API 转发到 MacOS 上指定的端口中:
567+
568+
```bash
569+
docker run -d -v /var/run/docker.sock:/var/run/docker.sock -p 127.0.0.1:2375:2375 bobrik/socat TCP-LISTEN:2375,fork UNIX-CONNECT:/var/run/docker.sock
570+
```
571+
572+
### 测试
573+
574+
启用成功后,可以进行一些测试,例如直接使用浏览器访问 info 和 version 等页面获取信息。
575+
576+
```bash
577+
http://127.0.0.1:2375/info
578+
http://127.0.0.1:2375/version
579+
```
580+
516581
## 使用Docker实战
517582

518583
> ⚠文件挂载注意:docker 禁止用主机上不存在的文件挂载到 container 中已经存在的文件

0 commit comments

Comments
 (0)