如何在没有root用户的情况下连接到远程docker守护程序?

时间:2018-09-20 19:52:32

标签: docker

我有一台运行docker守护程序的服务器,暴露了端口2375(是的,这很顽皮,但是我正在寻找在做正确的事情之前进行最简单的设置的工作)。

我可以以root用户身份连接到远程服务器:

➜  ~ export DOCKER_HOST=72.333.194.99:2375
➜  ~ docker ps
Cannot connect to the Docker daemon at tcp://72.333.194.99:2375. Is the docker daemon running?
➜  ~ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED                 STATUS              PORTS               NAMES
➜  ~ 

为简便起见,上面的示例可以使用本地源文件在远程服务器上构建映像并运行容器。

在没有root的情况下该如何做?

我已经在服务器上设置了docker组,因此当我在服务器中时,无需使用sudo。我的服务器上只有一个用户,名为“ root”。

3 个答案:

答案 0 :(得分:1)

  

我有一台运行docker守护程序的服务器,暴露了端口2375(是的,这很顽皮,但是我正在寻找在做正确的事情之前进行最简单的设置的工作)。

这不是顽皮的,很危险。这意味着您可以通过众所周知的协议扫描主机根远程外壳,并且无需密码即可对主机进行未经加密的访问,而无需输入密码。如果您实际上是这样设置的,那么很可能在您阅读此答案时,您的服务器已经被黑,因此您应该重新安装整个操作系统以确保安全。

  

我可以以root用户身份连接到远程服务器:

➜  ~ export DOCKER_HOST=72.333.194.99:2375
➜  ~ docker ps
Cannot connect to the Docker daemon at tcp://72.333.194.99:2375. Is the docker daemon running?
➜  ~ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED                 STATUS              PORTS               NAMES
➜  ~

您在两个docker命令中均未连接到远程服务器。首先,您没有提供有效的IP地址。 333超出有效范围。第二个sudo命令在具有不同环境的root shell中运行,因此您很有可能在该命令中看到了本地docker安装。您可以运行sudo docker info来查看。

  

如何在没有root用户的情况下连接到远程docker守护程序?

Docker是一个客户端/服务器应用程序。通过TCP连接时,远程服务器不知道您的本地用户ID,因此从等式中消除它。您需要在本地具有root用户访问权限或成为docker组成员的原因是,因为docker使用这些权限锁定了对/var/run/docker.sock的访问权限。如果尚未将远程服务器配置为(希望)在网络上侦听,则可以按照以下过程为服务器和客户端配置具有TLS密钥的私有CA:

https://docs.docker.com/engine/security/https/

如果您不遵循这些说明,而只是公开了没有TLS的套接字,或者未配置客户端和服务器的双向TLS身份验证,那么您实际上就可以在没有密码的情况下远程登录到服务器,因此请务必遵循所有步骤。


如果您不想配置双向TLS,则当前处于beta版本18.09,可以选择通过ssh连接到远程docker服务器:https://blog.docker.com/2018/09/join-the-beta-for-docker-engine-18-09/

$ docker -H ssh://me@example.com info

$ export DOCKER_HOST=ssh://me@example.com
$ docker info

答案 1 :(得分:0)

似乎您执行docker命令的用户不在docker守护程序组中,

您可以通过以下代码添加它:

注意:以存在问题的用户身份运行。

sudo usermod -a -G docker $(whoami)

此后,要应用更改,用户必须注销并再次登录。

答案 2 :(得分:0)

为了连接到在任何服务器计算机上运行的远程守护程序,请执行以下步骤。 识别运行Docker客户端的主机。 如果Docker 客户端计算机是Linux计算机。请运行以下命令以连接到远程Docker守护程序。

export DOCKER_HOST=ssh://administrator@10.242.41.222

以上命令将建立与远程计算机的ssh连接,所有docker命令都将在远程计算机上执行。

如果 Docker客户端计算机是Windows计算机。请运行以下命令以获得与上面相同的结果。

$env:DOCKER_HOST="ssh://administrator@10.242.41.222"

如果希望 docker客户端使用在客户端服务器上运行的旧Docker守护程序。请将环境变量的值重置为空。

在WIN中: $ env:DOCKER_HOST =“” 在Linux中:导出DOCKER_HOST =''