我可以 运行 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
如果你在两台机器上都有 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.
我在主机 (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
如果你在两台机器上都有 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.