标签: docker-stack

如何停止已部署的docker堆栈?

我刚刚完成了初学者Docker教程,想知道如何清理.

我使用以下命令部署了一个堆栈并使用了一些不同的服务:

docker stack deploy --compose-file docker-stack.yml vote 
Run Code Online (Sandbox Code Playgroud)

是否可以停止与此堆栈关联的所有容器,或者我是否必须单独停止它们?

谢谢!

docker docker-stack

16
推荐指数
1
解决办法
9026
查看次数

docker stack deploy导致"没有这样的图像错误"

我正在使用docker swarm并希望部署一个服务docker-compose.我的服务使用一个自定义映像,称为myuser/myrepo:mytag我成功部署到Docker-Hub到私有存储库.

我的docker-compose看起来像这样:

version: "3.3"

services:

  myservice:
    image: myuser/myrepo:mytag
    ports:
      - "8080:8080"
Run Code Online (Sandbox Code Playgroud)

在执行之前,我成功地将图像拉出: docker pull myuser/myrepo:mytag

当我跑步时,docker stack deploy -c docker-compose.yml myapp我总是收到错误:"No such image: myuser/myrepo:mytag".

有趣的是,仅运行相同的文件:( docker-compose up即没有swarm模式)一切正常,服务启动.

我真的不明白为什么会失败?我已经尝试过清理docker system prunedocker然后重新生成我的图像,但没有成功.

docker docker-compose docker-swarm docker-stack

15
推荐指数
2
解决办法
8246
查看次数

在哪里放置php artisan migration命令

试图在docker stack上部署laravel应用程序。我感到困惑或无法弄清的是,我可以在哪里运行此php artisan migrate:fresh生成mysql中所需的表。

服务和任务运行良好

docker-compose.yml

version: '3.3'

networks:
  smstake: 
    ipam:
      config:
        - subnet: 10.0.10.0/24

services:

    db:
        image: mysql:5.7
        networks:
          - smstake
        ports:
          - "3306:3306"
        volumes:
          - db_data:/var/lib/mysql
        environment:
          MYSQL_ROOT_PASSWORD: password
          MYSQL_DATABASE: smstake
          MYSQL_USER: root
          MYSQL_PASSWORD: password
        deploy:
          mode: replicated
          placement:
            constraints:
              - node.role == manager
    app:

        image: smstake:latest          
        ports:
          - 8000:80
        networks:
          - smstake

        command: docker-compose exec app php artisan migrate --seed
        deploy:
          mode: replicated
          replicas: 1
          placement:
            constraints:
              - node.role == manager
volumes:
    db_data:
Run Code Online (Sandbox Code Playgroud)

这是用于生成映像的dockerfile

FROM alpine

ENV …
Run Code Online (Sandbox Code Playgroud)

php laravel docker docker-stack

13
推荐指数
3
解决办法
6054
查看次数

如何在不重新启动所有服务的情况下更新docker堆栈

我有一个群集群,其中部署了不同的技术码头工人.(Zookeeper,Kafka,Elastic,Storm和自定义Web应用程序)

Web应用程序发生了巨大的变化,每次web docker更改时都必须更新堆栈.偶尔会有Elasticsearch图像的更新.

当我运行docker stack deploy时,它会重新启动所有甚至没有更改的现有docker服务.这妨碍了整个堆栈,整个应用程序都有停机时间.Docker堆栈没有更新选项.

有人有解决方案吗?

docker docker-swarm docker-stack

11
推荐指数
1
解决办法
6427
查看次数

Docker Swarms and Stacks:有什么区别?

我刚刚阅读了Docker出色的入门指南,只是想确认我是否了解Docker的基本说法,然后再继续。这些定义在文档中有所提供,但是其中许多文档都是基于示例的,没有为以下概念提供具体形式。

因此,我的理解是:

  • 服务:Docker服务是应用程序的不同组件:前端可能是React UI,后端可能是Spring Boot Web服务,您可能具有MySQL DB和RabbitMQ代理;这些都是组成您的应用程序的不同服务是吗?
  • 集群:Docker集群是当您有一个Swarm为2个以上Docker主机上的应用程序管理1个以上服务时;集群只是指运行您的服务容器的所有Docker主机,是吗?
  • Compose:Docker Compose是用于管理服务,群和堆栈的工具,吗?
  • 堆栈:当Swarm Manager为给定应用程序在给定群集上为多个服务管理多个Swarms时,就会发生Docker堆栈。因此,Swarm和Stack之间的区别在于,Swarm仅适用于单个服务,而Stack管理多个Swarms,因此管理着全部由可伸缩的分布式应用程序组成的多个Service,是吗?

所以我问:我对这些基本术语的理解是正确的还是在某种程度上被误导了?提前致谢!

docker docker-compose docker-swarm docker-stack

11
推荐指数
2
解决办法
3335
查看次数

Docker Swarm模式错误:将两个工作者连接到一个管理器

我在设置一个有两个工人和一个经理的Docker Swarm时遇到了困难.一切正常,直到我添加第二个工人.添加第二个worker后,第一个worker的守护进程会进入某种错误状态,其中一个简单的docker version收益

在此输入图像描述

另外,我使用Stack YAML启动三个Redis服务.

Stack.yaml

version: '3.4'

services:
  redis-master:
    image: 'bitnami/redis:5.0.2'
    ports:
      - '6379:6379'
    environment:
      - REDIS_REPLICATION_MODE=master 
      - REDIS_PASSWORD=f7paul12-d571-4701-9c55-64vanacecDyK
    deploy:
      mode: global
      restart_policy:
        condition: any
    volumes: 
      - 'redis:/opt/bitnami/redis/etc/'

  redis-replica:
    image: 'bitnami/redis:5.0.2'
    ports:
      - '6379'
    depends_on:
      - redis-master
    environment:
      - REDIS_REPLICATION_MODE=slave
      - REDIS_MASTER_HOST=redis-master
      - REDIS_MASTER_PORT_NUMBER=6379
      - REDIS_MASTER_PASSWORD=f7paul12-d571-4701-9c55-64vanacecDyK
      - REDIS_PASSWORD=f7paul12-d571-4701-9c55-64vanacecDyK
    deploy:
      mode: replicated
      replicas: 6
      update_config:
        parallelism: 1
        delay: 20s
      restart_policy:
        condition: any

  redis-sentinel:
    image: 'bitnami/redis:5.0.2'
    ports:
      - '16379'
    depends_on:
      - redis-master
      - redis-replica
    entrypoint: |
      bash -c 'bash …
Run Code Online (Sandbox Code Playgroud)

docker docker-swarm docker-machine docker-swarm-mode docker-stack

11
推荐指数
1
解决办法
167
查看次数

在堆栈部署上,无法固定图像以摘要:未经授权:客户端没有清单权限

我正在使用已推送到 Artifactory 存储库的自定义映像运行 Docker 堆栈。

docker-compose.yml:

version: "3"

services:
  app:
    image: repo.example.com/my_image:latest
Run Code Online (Sandbox Code Playgroud)

我可以很好地提取映像,并且可以很好地部署堆栈,但如果我尝试重新部署堆栈,则会收到错误。

$ docker stack deploy --with-registry-auth -c docker-compose.yml my_stack
Creating network my_stack_default
Creating service my_stack_app

$ docker stack deploy --with-registry-auth -c docker-compose.yml my_stack
Updating service my_stack_app (id: 8po6oepjdgo8kwsb7n4ig64dt)
unable to pin image repo.example.com/my_image:latest to digest: unauthorized: The client does not have permission for manifest
Run Code Online (Sandbox Code Playgroud)

我希望 Docker 在重新部署堆栈时更新映像,就像我使用 Docker Hub 中的映像一样。

我以前见过Docker说过unable to pin image,但那是当我没有指定存储库(例如docker.io)时。我知道我已经获得了许可,repo.example.com因为我将图像推到了那里,我仍然可以从中提取图像,并且可以启动堆栈。我只是无法更新它。

此错误意味着什么client does not have permission for manifest?如何解决此问题?

artifactory docker docker-swarm docker-stack

11
推荐指数
2
解决办法
5万
查看次数

混合命名卷并在Docker中绑定挂载?

混合命名卷和绑定挂载如何工作?使用以下安装程序,绑定安装中的路径是否仍将存在于绑定安装中,就像绑定安装中存在的路径一样? /var/www/html/wp-content/uploads

使用我附加到命名卷的单独容器,似乎表明情况并非如此,因为从单独容器的角度来看,这些路径是完全空的。有某种方法可以在某种意义上起作用吗?

volumes: - "wordpress:/var/www/html" - "./wordpress/uploads:/var/www/html/wp-content/uploads" - "./wordpress/plugins:/var/www/html/wp-content/plugins" - "./wordpress/themes:/var/www/html/wp-content/themes"

docker docker-compose docker-stack

9
推荐指数
1
解决办法
2592
查看次数

在堆栈部署后向堆栈添加服务

我正在尝试在堆栈部署后向堆栈添加服务。但是这个新服务在与堆栈内的服务(redis)通信时遇到了麻烦。

这是我目前对堆栈和服务的理解,如果有任何不准确之处,请告诉我。

堆栈是服务之上的抽象,它提供有用的实用程序,例如 DNS,因此堆栈中的服务可以相互通信。堆栈允许我们在逻辑上分离出可能运行在同一个群上的服务组(因此不同的开发团队可以共享同一个群)。

我想首先将一个堆栈部署到一个 swarm 中(通过 compose 文件),然后定期添加容器,就像这篇关于一次性容器的文章中描述的那样。这些容器是不同的,因为它们正在执行长时间的、有状态的操作。他们需要在一些初始状态下启动,完成他们的工作,然后离开。它们是不同的,因为它们不需要复制或负载平衡。

基本上我想做的是:

像这样启动一个“堆栈”:

docker stack deploy --with-registry-auth --compose-file docker-compose.yml my-stack

然后一段时间后,当满足某些条件时,添加一个这样的容器:

docker service create -name statefulservice reponame/imagename

这通常按预期运行,除了 statefulservice 无法与 my-stack 中的 redis 通信。

我相信 statefulservice 的设计是正确的,因为当它被添加到 docker-compose.yml 时,它会按预期运行。

可能相关也可能不相关的进一步细节是,创建新服务的命令是从 swarm 中的容器发出的。这是使用 go sdk for docker 发生的,我正在按照一次性容器文章描述的方式使用它

我怀疑这无关紧要的原因:当我仅通过 docker-cli 执行此操作时(并且不使用 docker sdk for go),我仍然遇到这个问题。

docker docker-compose docker-swarm docker-swarm-mode docker-stack

9
推荐指数
1
解决办法
5101
查看次数

Docker Stack任务因Permission denied错误而被拒绝

我尝试使用docker stack deploy命令部署堆栈(包含一个服务)并从我的swarm应用程序运行2个实例!这是我的docker-compose文件:

version: "3"
services:
  server:
    image: makbn/thumbnailer-server:v1
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
      resources:
        limits:
          cpus: "0.1"
          memory: 1024M
      restart_policy:
        condition: on-failure
    ports:
      - 8080:8080
    networks: 
      - server_network
networks: 
  server_network:
Run Code Online (Sandbox Code Playgroud)

运行sudo docker stack deploy -c ./docker-compose.yml ts命令后,My stack成功部署到swarm,但这是我的docker stack ps ts 输出:

ID                  NAME                IMAGE                         NODE                DESIRED STATE       CURRENT STATE             ERROR                              PORTS
8zmjp6wt47ki        ts_server.1         makbn/thumbnailer-server:v1   fanap9-lp           Ready               Rejected 2 seconds ago    "mkdir /var/lib/docker: permis…"   
88vizpnabbi8         \_ ts_server.1     makbn/thumbnailer-server:v1   fanap9-lp           Shutdown            Rejected 7 seconds …
Run Code Online (Sandbox Code Playgroud)

docker docker-compose docker-network docker-stack

9
推荐指数
1
解决办法
1729
查看次数