我需要将一些文件从工作节点上运行的容器复制到管理主机。 这个操作我需要留在经理那里做。
换句话说,如何从管理器访问工作节点上运行的容器?
有人可以帮忙吗?
这是不可能的。当您在集群中创建一个在工作节点上运行的服务时,该节点上的 Docker 将启动一个简单的 Docker 容器。该容器必须用于复制输入/输出文件(可以从管理器访问该服务(例如:
logs
cmd),但容器本身不能)!
您可以简单验证一下:
如果您运行以下命令根据服务名称获取容器ID,您可以获取实际节点上的容器ID(这意味着您将能够从实际节点连接到容器)
docker ps -q -f name=<service_name>
如果
<service_name>
的副本之一在实际服务器上运行,那么您将获得一个 Docker 容器 ID,并且可以连接它。例如:
>>> docker ps -q -f name=test_swarm_service
b1ae9e0991ef
如果实际节点上没有正在运行的副本,您将不会从命令中得到任何结果,这意味着您将无法从实际节点连接到它。
如果您确定其中一个副本在实际节点上运行,您可以从容器中复制文件(通过 Swarm 服务名称),如下所示:
docker cp $(docker ps -q -f name=<servicename>):/inside/path/ /local/path