Docker堆栈/服务不起作用,如何调试?

时间:2020-03-21 07:55:18

标签: docker docker-swarm docker-stack

我正在为docker-swarm制作堆栈。

这是我的django和nginx堆栈。

我部署了它,但从未开始。

ID                  NAME                    MODE                REPLICAS            IMAGE                                 PORTS
n9j49jx667x5        django_nginx    replicated          0/1                 nginx:1.13                            *:8000->8000/tcp
7h3sbmmgwbvn        django_python   replicated          0/1                 registry:5000/mydjango:latest   *:8082->8082/tcp
dkzk9z3rdtzm        phpmyadmin_phpmyadmin   global              1/1                 phpmyadmin/phpmyadmin:latest          *:8009->80/tcp
kf6xisbvqdqv        visualizer_app          global              1/1                 dockersamples/visualizer:latest       *:9009->8080/tcp

现在我想检查一下为什么这个堆栈不起作用。

但是我该如何查看日志或一些线索?

如果服务一次可用,我可以像

一样检查
docker container exec -it manager docker service logs -f visualizer_app

但是我如何调查为什么堆栈/服务不起作用... ??

version: '3'
services:
  python:
    image: registry:5000/mydjango:latest
    command: uwsgi --socket :8001 --module jrtweet.wsgi --py-autoreload 1 --logto /tmp/mylog.log
    volumes: 
      - ./src:/code
      - ./src/static:/static
    ports:
      - "8082:8082"
  nginx:
    image: nginx:1.13
    ports:
      - "8000:8000"
    volumes:
      - ./nginx/conf:/etc/nginx/conf.d
      - ./nginx/uwsgi_params:/etc/nginx/uwsgi_params
      - ./static:/static
    depends_on:
      - python

即使我尝试了最简单的设置,但它不起作用,我什至不知道如何调试.....


我找出了它无法正常工作的原因,尝试并出错。

我注释了#volumes可行,但这必须是另一个问题...

我仍然想知道服务启动的调试.....


对taleodor表示感谢,我可以找到日志service ps

docker container exec -it man docker service ps django_python


mbx47zczllwm        django_python.1       registry:5000/myprog/djangosrc:latest   6b0938c9c5fb        Ready               Rejected less than a second ago   "invalid mount config for type…"   
xgpet2jwwocq         \_ django_python.1   registry:5000/myprog/djangosrc:latest   6b0938c9c5fb        Shutdown            Rejected less than a second ago   "invalid mount config for type…"   
zl1z7a0qx330         \_ django_python.1   registry:5000/myprog/djangosrc:latest   6b0938c9c5fb        Shutdown            Rejected 38 seconds ago           "invalid mount config for type…"   
zewlsc76zluy         \_ django_python.1   registry:5000/myprog/djangosrc:latest   6b0938c9c5fb        Shutdown            Rejected about a minute ago       "invalid mount config for type…"   
zytucyx6unsg         \_ django_python.1   registry:5000/myprog/djangosrc:latest   6b0938c9c5fb        Shutdown            Rejected about a minute ago       "invalid mount config for type…"   
zqjdobhkti47         \_ django_python.1   registry:5000/myprog/djangosrc:latest   6b0938c9c5fb        Shutdown            Rejected about a minute ago       "invalid mount config for type…"   
zxe18cc554ev         \_ django_python.1   registry:5000/myprog/djangosrc:latest   6b0938c9c5fb        Shutdown            Rejected about a minute ago       "invalid mount config for type…"  

2 个答案:

答案 0 :(得分:1)

  1. 执行 docker service ps ,即:

    docker服务ps django_nginx

  2. 这将为您提供有关尝试启动服务器以及可能的错误的线索。如果错误足够明显,请停在那里。

  3. 如果错误仍未清除-容器已启动但很快退出,请通过 docker ps 找到这些容器,并通过

    获取日志

    docker日志container_id

答案 1 :(得分:0)

可以像这样识别出计划级别错误,例如“找不到图像”,“没有适合放置约束的节点”或“卷插件错误”: docker service ps django_python --no-trunc

--no-trunc将阻止错误消息被切断。

集群部署需要绑定安装(您尝试使用的类型)才能使用绝对路径。

让我们假设您的docker-compose.yml位于/home/user/docker-compose.yml中,并且您想将主机路径/ home / user / test用作“卷源”。然后,您实际上需要使用绝对路径/ home / user / tests而不是相对路径./test,就像您在示例中所做的那样。