在 docker 的官方文档中, 介绍了三种访问 docker Remote API 的方式, 分别是 unix 套接字文件/ tcp 监听端口和 fd 文件描述符. 由于 docker 默认会为我们开启本地 socket 套接字(/var/run/docker.sock) 所以本篇文章主要介绍如何让 docker 监听 tcp端口
在 docker 配置文件中设置
docker 1.12 版本之后, 建议在 docker 的 js 配置文件中配置, 路径为 /etc/docker/daemon.js 默认没有这个文件, 可以手动创建此文件, docker 启动时默认会读取此配置文件
1 #vim /etc/docker/daemon.js 2 { 3 "hosts": [ 4 "tcp://0.0.0.0:2375", 5 "unix:///var/run/docker.sock" 6 ] 7 }
注意上面👆一定要写上本地的 socket 位置, 不然无法使用本地的 CLI 控制 docker
unix:///var/run/docker.sock
修改完js配置文件后, 重启 docker 服务, 出现了如下报错
# systemctl restart docker.service
Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
查看日志发现关键信息如下
1
|
> systemctl status docker.service
|
从上面👆的报错信息中可以判断出, 是因为 docker 的 socket 配置出现了冲突, 接下来查看 docker 的启动入口文件
> vim /lib/systemd/system/docker.service # Ubuntu的路径; CentOS 的路径为: /usr/lib/systemd/system/docker.service
# ...省
# 关键行
ExecStart=/usr/bin/dockerd -H fd://
# ...省略
从上面可以看出, 在 docker 的启动入口文件中配置了 host 相关的信息, 而在 docker 的配置文件中也配置了 host 的信息, 所以发生了冲突. 解决办法, 建议将 docker 启动入口文件中的 -H fd:// 删除, 再重启 docker 服务即可
1
|
# ExecStart=/usr/bin/dockerd -H fd://
|
在 docker 启动入口中设置
当然你也可以在启动入口配置监听的端口和本地 socket 信息
1
|
> vim /lib/systemd/system/docker.service # Ubuntu的路径; CentOS 的路径为: /usr/lib/systemd/system/docker.service
|
最下面两条配置是等价的, docker 默认的本地 socket 文件就在 /var/run/docker.sock 这个位置, 如果没有特殊需求, 不需要显示的进行配置
浙公网安备 33010602011771号