我可以 运行 Docker 从外部 VM 执行吗?

Can I Run Docker Exec from an external VM?

我在主机 (172.16.0.1) 上有一组 docker 容器 运行ning。由于主机 运行 宁 docker 容器的大小限制,我试图在不同的主机 (172.16.0.2) 上设置一个自动测试框架。我需要我的自动测试框架能够访问 docker 容器。我查看了 docker 文档,但没有看到任何说明如何执行此操作的内容。

是否可以 运行 一个 docker exec 并将其指向 docker 主机?我希望做类似下面的事情,但没有指定主机的选项。:

docker exec -h 172.16.0.1 -it my_container bash

我应该使用不同的命令吗?

谢谢!

不确定为什么需要远程执行 docker exec。但无论如何它是可以实现的。

您需要确保您的容器 运行 所在主机上的 docker 守护程序是 listening on a socket

像这样:

# Running docker daemon which listens on tcp socket
$ sudo dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375

现在使用以下方法从外部 VM 远程与 docker 守护程序交互:

$ docker -H tcp://<machine-ip>:2375 exec -it my-container bash
OR
$ export DOCKER_HOST="tcp://<machine-ip>:2375"
$ docker exec -it my-container bash

注意: 在您的网络中公开公开 docker 套接字存在一些严重的安全风险。尽管还有其他方法可以在 encrypted HTTPS socket 或 ssh 协议上公开它。

请在尝试任何操作之前仔细阅读这些文档:

https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-socket-option

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

如果你在两台机器上都有 SSH,你可以像这样轻松地在远程守护进程上执行命令:

docker -H "ssh://username@remote_host" <your normal docker command>
# for example:
docker -H "ssh://username@remote_host" exec ...
docker -H "ssh://username@remote_host" ps
# and so on

另一种方法是将 -H 键值存储到 DOCKER_HOST 环境变量中:

export DOCKER_HOST=ssh://username@remote_host
# now you can talk to remote daemon with your regular commands
# these will be executed on remote host:
docker ps
docker exec ...

如果没有 SSH,您可以让 Docker 侦听 TCP。这将需要您做一些准备以维护安全。 This 指南介绍了创建证书和一些基本用法。之后你会有一些类似的用法:

docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem \
  -H=172.16.0.1:2376

您终于可以使用docker context来保存外部主机及其配置了。使用上下文允许您通过使用 --context <name> 选项轻松地与各种远程主机通信。阅读上下文文档 here.