Docker实践(1) – 设置守护进程对外开放

虽然默认下你的Docker daemon只允许在本机访问,但有时候也有充足理由让其他人访问。你可能有什么问题想让其他人远程调试,或者你可能想允许DevOps工作流来启动主机上的一个进程。

INSECURE!虽然这是一个强大且有用的技术,但是这认为是不安全的。一个开放的Docker daemon可能被其他人利用来获取系统权限。

问题

你想对其他人开放Docker服务器的访问权限

方法

以开放的TCP地址启动Docker daemon

讨论

以下图是这种技术的工作原理.

在你开放Docker daemon之前,首先得关闭它。如何关闭它取决于你的系统,如果你不清楚,先执行如下命令:

  1. $ sudo service docker stop

如果你得到如下信息:
The service command supports only basic LSB actions (start, stop, restart,
try-restart, reload, force-reload, status). For other actions, please try
to use systemctl.
表示你的系统启动管理是基于systemctl的,尝试如下命令:

  1. $ systemctl stop docker

如果这个可行,那么下面的命令将没有任务输出:

  1. ps -ef | grep -E 'docker (-d|daemon)\b' | grep -v grep

一旦Docker daemon已经停止,你就可以使用以下的命令手动重启来打开对外用户的访问:

  1. docker daemon -H tcp://0.0.0.0:2375

此命令以守护进程启动docker,使用-H参数为定义主机服务器,使用TCP协议,监听所有IP(使用0.0.0.0),开放docker服务器标准端口2375。如果Docker提示daemon是一个无效子命令,尝试使用旧的-d参数。
之后你可以在外面使用如下命令来访问docker:

  1. $ docker -H tcp://<your host's ip>:2375

注意你在本机也使用用此方法来连接docker,因为docker已经不再监听默认的地址。
如果你想让此更改永久生效(即使重启后),虽然更改docker的配置文件:
系统Ubuntu / Debian / Gentoo配置文件为:/etc/default/docker
OpenSuse / CentOS / Red Hat配置文件为:/etc/sysconfg/docker
在配置文件中找到DOCKER_OPTS,设置为以上的启动参数,如DOCKER_OPTS=”daemon -H tcp://0.0.0.0:2375″
如果你的系统使用的是systemd配置文件,那么在/usr/lib/systemd/system/service/docker中找到ExecStart行,设置为ExecStart=/usr/bin/docker daemon -H tcp://0.0.0.0:2375

开放docker daemon后,建议使用防火墙来限制对指定IP开放访问,而且不使用0.0.0.0,非常不安全。

标签:Docker 发布于:2019-11-21 00:50:07