【问题标题】:Not able to run service using docker stack in docker swarm无法在 docker swarm 中使用 docker stack 运行服务
【发布时间】:2018-07-25 21:00:56
【问题描述】:

这是我曾经使用 docker-compose 成功运行 docker 容器的 docker-compose 文件。

现在尝试使用 docker 堆栈进行部署。我的经理和工作节点已准备就绪。

docker-compose.yml

version: '3'
services:

    prometheus:
        image: prom/prometheus
        volumes:
            - ./prometheus.yml:/etc/prometheus/prometheus.yml
        command:
            - '--config.file=/etc/prometheus/prometheus.yml'
        ports:
            - '9090:9090'
        deploy:
           mode: replicated
           replicas: 1
           placement:
               constraints:
                   - node.role == manager

使用的命令:

docker stack deploy -c docker-compose.yml monitoring

尝试在管理器节点中运行它。为什么服务没有运行。使用docker service ls 检查服务是否正在运行显示 0/1,如下图所示。

当尝试使用 docker service logs <servicename> 检查日志时,没有加载任何内容。

我到底在哪里错过了这些东西。我的最终目标是运行完整的 docker 监控服务,如 cadvisor 和 node-exporter 以及所有其他所需的服务。我试过这个 https://github.com/stefanprodan/swarmprom/blob/master/docker-compose.yml

我发现问题出在复制模式下,但在全局模式下运行良好。

复制模式有什么错误。我不认为我在这里有语法错误。如何使其在复制模式下仅在管理器节点中运行

【问题讨论】:

  • docker service ps monitoring_prometheus 输出什么(尤其是错误列)?
  • "分配网关失败(1...."
  • 我这样做是为了删除不需要的网络docker network prune 现在服务正在运行,但不在管理节点中,也没有在docker service ls 中显示 1/1
  • 充其量,您可以使用所有这些信息更新您的问题,以尽量减少 cmets 的数量(其他人也必须阅读),之后您也可以在此处删除您的 cmets。 (就像我会处理这条评论一样)
  • 能否重新运行docker service ps --no-trunc monitoring_prometheus(注意--no-trunc)?

标签: docker docker-compose docker-swarm prometheus docker-swarm-mode


【解决方案1】:

这可能与 Swarm Master / Manager 的放置约束有关。在尝试使用 Azure 容器服务在主节点上安排可视化器或分配器容器时,我遇到了类似的问题。您可以检查主站的状态。如果它处于 Puased 状态,您可以使其处于活动状态 我在https://www.handsonarchitect.com/2017/11/visualize-docker-swarm-in-azure.html分享了我的经验

【讨论】:

  • 不是暂停模式而是active
  • Swarm 集群中有多少个节点?理想情况下,这无关紧要,因为您将约束安排在 Master 上。你能检查一下主机上的9090端口是否没有被任何其他服务使用吗?
【解决方案2】:

如果“docker-compose up”一切正常,但您发现“docker stack deploy”存在问题。这就是我修复它的方法。

我在 Windows 机器上使用 docker,而 docker 使用 VirtualBox VM。您需要进行端口转发才能查看主机中的容器。

问题与卷的绑定挂载有关。

当我做 docker inspect 时,请查看以下两种情况下的路径:

  1. Docker 组合起来:


"Mounts": [
{
"Type": "bind",
"Source": "/c/Users/Bardav/Documents/Large-Scale-Software Testing/PromptDocker/PromptDocker/app_users",
"Destination": "/app",
"Mode": "rw",
"RW": true,
"Propagation": "rprivate"
}


  1. Docker 堆栈部署 -c docker-compose.ymal 存储:


"Mounts": [
{
"Type": "bind",
"Source": "C:\\Users\\Bardav\\Documents\\Large-Scale-Software Testing\\PromptDocker\\PromptDocker\\app_viewer",
"Target": "/app/"
}
],

解决方案:

更新docker-compose.yml 中的路径即可。比如;

相对路径不起作用

reg_users:
    image: prompt_user_app
    build: ./app_users/    
    volumes:
      - ./app_users/:/app/

绝对路径工作正常

reg_users:
    image: prompt_user_app
    build: ./app_users/    
    volumes:
      - "/c/Users/Bardav/Documents/Large-Scale-Software Testing/PromptDocker/PromptDocker/app_users:/app/"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    相关资源
    最近更新 更多