【问题标题】:Docker swarm service - running state but no logsDocker swarm 服务 - 运行状态但没有日志
【发布时间】:2020-08-24 11:32:27
【问题描述】:

在现有的 swarm 中,我使用“docker stack”命令通过 docker-compose yaml 文件创建了一个服务。

  1. 当我通过“docker service ls”命令检查服务时,新服务显示在列表中。它在 REPLICAS 列中显示“0/1”

  2. 当我使用以下命令检查服务时,它显示“正在运行”作为所需状态

    docker service ps --no-trunc (service id)

  3. 当我检查是否已经有服务的对应容器时,我可以看到没有

  4. 当我尝试通过浏览器访问服务时,它似乎没有启动。

  5. 困难的是我看不到任何日志来找出发生这种情况的原因

    docker 服务日志(服务 id)

我想它可能只是启动很慢,但我等了大约半个小时,它仍然处于那种状态。不知道如何在没有任何日志的情况下找出原因。谁能帮我解决这个问题?

编辑:下面是我对服务任务进行 docker 检查时的结果

[
    {
        "ID": "wt2tdoz64j5wmci4gr3q3io2e",
        "Version": {
            "Index": 3407514
        },
        "CreatedAt": "2020-08-25T00:58:13.012900717Z",
        "UpdatedAt": "2020-08-25T00:58:13.012900717Z",
        "Labels": {},
        "Spec": {
            "ContainerSpec": {
                "Image": "my-ui-image:1.8.006",
                "Labels": {
                    "com.docker.stack.namespace": "myservice-stack"
                },
                "Env": [
                    "BACKEND_HOSTNAME=somewebsite.com",
                    "BACKEND_PORT=3421"
                ],
                "Privileges": {
                    "CredentialSpec": null,
                    "SELinuxContext": null
                },
                "Hosts": [
                    "10.152.30.18 somewebsite.com"
                ],
                "Isolation": "default"
            },
            "Resources": {},
            "Placement": {},
            "Networks": [
                {
                    "Target": "lt87emwtgbeztof5k2r1z2v27",
                    "Aliases": [
                        "myui_poc2"
                    ]
                }
            ],
            "ForceUpdate": 0
        },
        "ServiceID": "nbskoeofakkgxlgj3utgn45c5",
        "Slot": 1,
        "Status": {
            "Timestamp": "2020-08-25T00:58:13.012883476Z",
            "State": "new",
            "Message": "created",
            "PortStatus": {}
        },
        "DesiredState": "running"
    }
]

【问题讨论】:

  • 嗨。发布 yml 文件可能有助于解决问题。
  • @Carlos 实际上它不仅由一项服务组成,而且由 10 项服务组成。这个太大了。同一个 docker 文件中的所有服务都遇到同样的问题
  • 你有没有在 swarm 中正常运行的其他服务?服务是否使用自定义图像或来自 dockerhub 的“标准”图像遇到问题?
  • 您可以只为一项服务发布 yml sn-p 吗?如果没有更多细节,很难说是环境问题还是服务配置问题或其他问题。

标签: docker docker-compose docker-swarm docker-stack


【解决方案1】:

如果您将图像存储在私有注册表中,那么您必须通过命令docker login 登录并通过docker stack deploy -c docker-compose.yml your_service --with-registry-auth 部署您的服务。

【讨论】:

  • 图像也存储在服务器中,而不是单独的工件中
  • 这是问题。主节点不与其他节点共享本地图像。您可以创建简单的 docker 注册表 docs.docker.com/registry
  • 好的,感谢您提供的信息,但到目前为止这只是一个节点。只是一个主节点
  • 你可以在你的命令docker stack deploy -c docker-compose.yml myservice-stack --resolve-image never中使用选项--resolve-image
  • 在部署之前尝试删除所有服务docker service rm $(docker service ls -q) 。如果没有帮助,我们将需要 docker-compose.yml
【解决方案2】:

docker service ps ... 输出中,您将看到一个带有任务ID 的列。您可以通过检查任务 ID 来获取该任务状态的更多详细信息:

docker inspect $taskid

【讨论】:

  • @lecarpetrondookmarion 我也没有,但是我没有办法看到在您的环境中运行的任何这些命令。在没有看到您正在运行的命令的任何输出的情况下,我们所能做的就是猜测。
  • 我添加了 docker 检查任务的结果。见上文
【解决方案3】:

我的猜测是您的应用没有将其输出重定向到标准输出,这就是为什么您在执行“docker service logs...”时没有得到任何输出的原因。

我会先看看这个:https://docs.docker.com/config/containers/logging/

如何将应用程序输出重定向到标准输出取决于您的应用程序是用什么语言开发的。

【讨论】:

  • 当你执行“docker service ps (serviceid)”时,你是否只返回一个状态为“正在运行”的条目?或者您是否获得状态为“关闭”的其他条目?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-22
  • 2018-07-25
  • 2022-01-23
  • 2019-11-17
  • 1970-01-01
相关资源
最近更新 更多