启用Docker Engine API的远程访问端口

作者:Rui 发布时间:July 1, 2017 分类:Docker,CLOUD 浏览:2,419

在Linux下安装的Docker,默认会将Docker Engine的服务绑定到Unix Sock(unix:///var/run/docker.sock),这种方式,只支持通过本地访问的形式,访问服务API,我们使用docker命令默认也是连接的本地Unix Sock。Docker也支持将服务绑定到TCP端口上,这样,就可以轻松通过远程访问的形式管理Docker。

切记: 如果开启面向公网的TCP端口时,一定要加密码认证,不然会有很多比特币病毒,利用该端口创建挖矿服务。说多了都是泪!

Ubuntu下Docker启动服务的方式
在Ubuntu下安装Docker,会在/lib/systemd/system/目录下生成docker service,编辑docker.service文件,我们就可以看到Docker Daemon启动的过程

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target docker.socket firewalld.service
Wants=network-online.target
Requires=docker.socket

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd://
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=1048576
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target

从该配置中,可以看到ExecStart=/usr/bin/dockerd -H fd:// ,Docker使用dockerd启动,并默认绑定到fd://,具体可参考官方文档:
https://docs.docker.com/engine/reference/commandline/dockerd/#examples
我们可以直接在该文件中修改启动参数,使其绑定tcp socket。具体配置如下:

ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376

修改完后,我们就可以直接重启docker服务即可生效

通过修改daemon.json的形式修改绑定Host
不仅可以通过以上方式来启动绑定多个sockets,也可以修改docker的daemon.json配置文件的方式来修改。文件目录/etc/docker/daemon.json,如果没有该文件,可以直接创建,添加内容如下:

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

使用该方法注意,daemon.json的配置不能和systemd的docker服务中Dockerd命令使用的参数重复,例如docker.service中指定了-H参数,就不可以在daemon.json中使用该命令,所以如果私用该方式,需要修改docker.service,将-H参数去掉。

参考文档
daemon.json 配置使用
自定义Docker Daemon选项

标签: docker

添加新评论 »