将服务部署到集群时,意外创建了额外的容器

时间:2018-07-04 16:34:28

标签: docker docker-swarm

在以Swarm模式使用docker创建服务时,我观察到swarm的奇怪行为。

基本上,我从具有绑定安装的私有注册表创建服务:

docker service create --mount type=bind,src=/some/shared/filesystem/mod_tile,dst=/osm/mod_tile,ro --name="mod_tile" --publish 8082:80 --replicas 3 --with-registry-auth  my-registry:5050/repo1/mod_tile

这很顺利...并且我的服务可以按我期望的方式复制...

但是当我在管理器上执行 docker ps 时,我看到了我期望的容器以及一个意外的第二个容器,它们从同一图像运行,并使用不同的名称:

CONTAINER ID        IMAGE                                                                    COMMAND                  CREATED              STATUS                PORTS                                            NAMES
ca33d        my-registry:5050/mod_tile:latest                                   "apachectl -D FOREGRâ¦"   About a minute ago   Up About a minute                                                      vigilant_kare.1.fn5u
619e7        my-registry:5050/mod_tile:latest                                   "apachectl -D FOREGRâ¦"   3 minutes ago        Up 3 minutes                                                           mod_tile.3.dyismrc
4f1ebf       demo/demo-tomcat:0.0.1                                                   "./entrypoint.sh"        7 days ago           Up 7 days (healthy)   9900/tcp, 0.0.0.0:8083->8080/tcp                 tomcatgeoserver
d3adf        some.repo:5000/manomarks/visualizer:latest   "npm start"              8 days ago           Up 8 days             8080/tcp                                         supervision_visualizer.1.ok27kbz
673c1        some.repo:5000/grafana/grafana:latest        "/run.sh"                8 days ago           Up 8 days             3000/tcp                                         supervision_grafana.1.pgqko8       some.repo:5000/portainer:latest              "/portainer --externâ¦"   8 days ago           Up 8 days             9000/tcp                                         supervision_portainer.1.vi90w6
bd9b1       some.repo:5000/prom/prometheus:latest        "/bin/prometheus -coâ¦"   8 days ago           Up 8 days             9090/tcp                                         supervision_prometheus.1.j4gyn02
d8a8b        some.repo:5000/cadvisor:0.25.0               "/usr/bin/cadvisor -â¦"   8 days ago           Up 8 days             8080/tcp                                         supervision_cadvisor.om7km
bd46d       some.repo:5000/prom/node-exporter:latest     "/bin/node_exporter â¦"   8 days ago           Up 8 days             9100/tcp                                         supervision_nodeexporter.om7kmd
04b53        some.repo:5000/sonatype/nexus3               "sh -c ${SONATYPE_DIâ¦"   9 days ago           Up 2 hours            0.0.0.0:5050->5050/tcp, 0.0.0.0:8081->8081/tcp   nexus_registry

起初,我认为它是先前尝试中的剩余容器,所以我将其停止了……但是几秒钟后,它又恢复了!无论我停了多少次,它都会重新启动。

所以,我想它是故意存在的...但是我不明白:我已经在运行我的3个副本(我在所有节点上都进行了检查),即使我升级了另一个节点,额外的容器也只会出现在领导上...

这可能来自我的另一个容器(用于监视),但是到目前为止,我仍无法弄清是哪个容器...

有人知道为什么要创建这个额外的容器吗?

编辑05/07

这是mod_tile服务上的docker ps的结果。这里有3个副本,每个节点一个。 “ ps”命令不考虑额外的服务。

ID                  NAME                IMAGE                                    NODE                DESIRED STATE       CURRENT STATE          ERROR               PORTS
c77gc        mod_tile.1          my-registry:5050/mod_tile:latest   VM3           Running             Running 15 hours ago
u7465        mod_tile.2          my-registry:5050/mod_tile:latest   VM4           Running             Running 15 hours ago
dyism        mod_tile.3          my-registry:5050/mod_tile:latest   VM2           Running             Running 15 hours ago

1 个答案:

答案 0 :(得分:1)

您似乎已经定义了第二个服务,其名称为“ vigilant_kare”,如果您未提供名称,则可能会自动命名。

群集模式将自动更正一个已关闭或已删除的容器,以使您返回目标状态。要删除由群集模式管理的容器,您需要删除对其进行管理的服务:

docker service rm vigilant_kare