Docker swarm带来了太多的进程

Docker swarm带来了太多的进程,docker,docker-compose,celery,docker-swarm,Docker,Docker Compose,Celery,Docker Swarm,我正在使用docker swarm运行一些芹菜工人,并注意到docker service ls显示的进程明显少于系统工具(如top) 这是我运行docker service ls时得到的 docker service ls ID NAME MODE REPLICAS IMAGE

我正在使用
docker swarm
运行一些芹菜工人,并注意到
docker service ls
显示的进程明显少于系统工具(如top)

这是我运行docker service ls时得到的

docker service ls
ID                  NAME                             MODE                REPLICAS            IMAGE                                                            PORTS
(...)
mdisx2effvfp        stack_celery                     replicated          1/1                 some:url
(...)
这是我运行
ps

ps ax | grep celery
 7606 ?        Ss     0:49 /usr/local/bin/python /usr/local/bin/celery -A my_package_name worker --loglevel=WARNING -Q my_queue_name
 7733 ?        S     11:53 /usr/local/bin/python /usr/local/bin/celery -A my_package_name worker --loglevel=WARNING -Q my_queue_name
 7734 ?        Sl     6:02 /usr/local/bin/python /usr/local/bin/celery -A my_package_name worker --loglevel=WARNING -Q my_queue_name
 7735 ?        S      5:52 /usr/local/bin/python /usr/local/bin/celery -A my_package_name worker --loglevel=WARNING -Q my_queue_name
这是我的
docker compose.yaml中的内容

cat docker-compose.yaml
(...)
celery:
  image: some:url
  command: celery -A my_package_name worker --loglevel=WARNING -Q my_queue_name
  depends_on:
    - queue # this is my other container with rabbitmq
  deploy:
    restart_policy:
      condition: any
    replicas: 1
    resources:
      limits:
        memory: 1G
  configs:
    - source: celeryconfig.py
      target: /my_package_name/celeryconfig.py
  networks:
    - backend
我错过什么了吗

我猜(当然是基于我的配置)
docker服务ls
应该显示与普通系统工具相同数量的进程

请帮我理解

--编辑(1)--

我还可以确认,当缩放到零时,我没有得到任何进程:

docker service scale stack_celery=0
当我这样做时,
ps
将不会显示芹菜进程。当我缩小到1时,我可以在
ps
中看到(再次)有4个进程

--编辑(2)--


好吧,我不认为芹菜会自动生成进程来容纳CPU的数量
-c1
修复了“问题”。

在容器中运行的服务、容器和进程是三种不同的东西

服务用于部署一个或多个具有相同配置的容器并维护目标状态。
服务ls
显示了容器中要运行的复制副本数量,而不是每个容器中运行的进程数量

容器是运行应用程序的隔离环境。该环境为文件系统、网络和进程id等对象获取名称空间。注意:主机可以在所有名称空间中看到进程,但在容器名称空间中,只能看到属于同一名称空间的进程

容器内的应用程序可能会产生多个进程。当容器内部的pid 1退出时,容器将停止,因此不要在后台启动服务器并退出启动它的shell。芹菜,它运行多个工人。一个容器只有一个副本,但该容器内部将有多个PID

另请参见:

此处的一些概念:

服务:由
docker service ls
提供,在docker-compose.yml中的关键字服务下定义,如“芹菜”,它是docker实例的逻辑组

进程:在Docker for linux中,您可以使用
ps
直接在主机上看到容器中运行的进程。(如果你猛击容器并运行
ps ax | grep芹菜
,你会看到几乎相同的情况。)

芹菜通过创造工人来工作。默认数字是CPU核心数。因此,使用
芹菜工人
可以获得4个工人进程