若要向该群中添加管理器,请运行“坞客群连接令牌管理器”并按照说明执行。
# start 2 services
docker service create continuumio/miniconda3
docker service create --name redis redis:3.0.6
root@ip-172-31-44-207:/home/ubuntu# docker service ls
ID NAME REPLICAS IMAGE COMMAND
2yc1xjmita67 miniconda3 0/1 continuumio/miniconda3
c3ptcf2q9zv2 redis 1/1 redis:3.0.6如上面所示,redis有它的副本,而miniconda是而不是,似乎是复制的。
我通常会登录到miniconda容器来输入以下命令:
/opt/conda/bin/conda install jupyter -y --quiet && mkdir /opt/notebooks && /opt/conda/bin/jupyter notebook --notebook-dir=/opt/notebooks --ip='*' --port=8888 --no-browser问题是,docker exec -it XXX bash命令不适用于群集模式。
发布于 2018-08-24 12:56:18
您可以通过过滤容器名来执行命令,而不需要只通过服务名称传递整个群集容器哈希。如下所示:
docker exec $(docker ps -q -f name=servicename) ls
发布于 2017-03-22 15:20:55
有一个用于访问本地主机服务的相应实例的衬垫:
docker exec -ti stack_myservice.1.$(docker service ps -f 'name=stack_myservice.1' stack_myservice -q --no-trunc | head -n1) /bin/bash它是在PowerShell上测试的,但是bash应该是相同的。oneliner访问第一个实例,但将'1‘替换为要在两个位置访问的实例的数量,以获得另一个实例。
更复杂的例子是分布式案例:
#! /bin/bash
set -e
exec_task=$1
exec_instance=$2
strindex() {
x="${1%%$2*}"
[[ "$x" = "$1" ]] && echo -1 || echo "${#x}"
}
parse_node() {
read title
id_start=0
name_start=`strindex "$title" NAME`
image_start=`strindex "$title" IMAGE`
node_start=`strindex "$title" NODE`
dstate_start=`strindex "$title" DESIRED`
id_length=name_start
name_length=`expr $image_start - $name_start`
node_length=`expr $dstate_start - $node_start`
read line
id=${line:$id_start:$id_length}
name=${line:$name_start:$name_length}
name=$(echo $name)
node=${line:$node_start:$node_length}
echo $name.$id
echo $node
}
if true; then
read fn
docker_fullname=$fn
read nn
docker_node=$nn
fi < <( docker service ps -f name=$exec_task.$exec_instance --no-trunc -f desired-state=running $exec_task | parse_node )
echo "Executing in $docker_node $docker_fullname"
eval `docker-machine env $docker_node`
docker exec -ti $docker_fullname /bin/bash稍后可以将此脚本用作:
swarm_bash stack_task 1它只是在所需的节点上执行bash。
发布于 2016-09-07 08:15:55
编辑2017-10-06:
现在,您可以使用--attachable标志创建覆盖网络,以使任何容器都能够加入网络。这是一个很好的特性,因为它允许很大的灵活性。
例如。
$ docker network create --attachable --driver overlay my-network
$ docker service create --network my-network --name web --publish 80:80 nginx
$ docker run --network=my-network -ti alpine sh
(in alpine container) $ wget -qO- web
<!DOCTYPE html>
<html>
<head>
....您是对的,您不能在码头群模式服务上运行docker exec。但是您仍然可以知道,哪个节点正在运行容器,然后直接在容器上运行exec。例如。
docker service ps miniconda3 # find out, which node is running the container
eval `docker-machine env <node name here>`
docker ps # find out the container id of miniconda
docker exec -it <container id here> sh在您的情况下,您必须首先了解为什么服务不能使miniconda容器正常运行。也许运行docker service ps miniconda3会显示一些有用的错误消息..?
https://stackoverflow.com/questions/39362363
复制相似问题