0

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

是否可以运行 docker exec 并将其指向 docker 主机?我希望执行以下操作,但没有指定主机的选项。:

docker exec -h 172.16.0.1 -it my_container bash

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

谢谢!

4

2 回答 2

2

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

您需要确保运行容器的主机上的 docker 守护程序正在侦听套接字

像这样的东西:

# 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 套接字有一些严重的安全风险。尽管还有其他方法可以在加密的 HTTPS 套接字或 ssh 协议上公开它。

在尝试任何事情之前,请仔细阅读这些文档:

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

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

于 2021-01-05T18:09:47.403 回答
1

如果您在两台机器上都有 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。这将需要您做一些准备以维护安全性。指南介绍了创建证书和一些基本用法。之后,您将有一些类似的用法:

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

最后,您可以使用docker context保存外部主机及其配置。--context <name>使用上下文允许您通过使用选项轻松地与各种远程主机进行通信。在此处阅读上下文文档。

于 2021-01-05T18:44:48.687 回答