如何使用具有多个副本的卷运行docker服务

时间:2019-12-11 08:35:38

标签: docker docker-compose nexus docker-swarm

在我的docker swarm集群中,我正在将nexus3存储库作为docker映像注册表运行。该存储库是我的devops基础架构的重要组成部分,因为我们有很多jenkins实例在集群中运行,并在单独的构建代理容器中开始所有构建。当我的nexus服务关闭时,我的jenkins实例无法提取构建代理容器的映像,因此,如果nexus崩溃,它们将无法再开始构建(例如,由于运行nexus的群集节点崩溃或重新启动) 。

昨天,我们遇到了另一个问题,即运行在nexus上的节点是唯一具有nexus自身图像本地副本的节点。因此,没有其他主机可以启动我的联系服务。我必须使用另一个节点上的Dockerfile从GIT存储库重建映像,然后在该节点上启动nexus。总而言之,这花费了大约半小时,我们无法开始任何构建工作。

因此,我尝试以两个副本的复制模式启动nexus:

deploy:
  mode: replicated
  replicas: 2

我的联系服务正在使用这样的卷:

services:
  nexus:
    volumes:
      - sonatype-work:/opt/sonatype/sonatype-work
[...]
volumes:
  sonatype-work:
    driver: local
    driver_opts:
      o: bind
      device: /mnt/docker-data/services/nexus3/sonatype-work
      type: none

当我重新部署我的关系堆栈时,一个实例正在启动,第二个实例始终启动,然后无错误退出(已完成)。有关我的联系服务,请参见docker service ps

docker@master:/mnt/docker-data/services/nexus3$ docker service ps nexus_nexus
ID             NAME                IMAGE                                NODE   DESIRED STATE  CURRENT STATE           ERROR   PORTS
oxez5kl866ma   nexus_nexus.1       localhost:5001/devops/nexus3:0.0.1   node1  Running        Running 2 minutes ago
u0s6slqlj0uf   nexus_nexus.2       localhost:5001/devops/nexus3:0.0.1   node4  Ready          Ready 1 second ago
d1u1btefzf1s    \_ nexus_nexus.2   localhost:5001/devops/nexus3:0.0.1   node4  Shutdown       Complete 1 second ago
ythgbtrmycon    \_ nexus_nexus.2   localhost:5001/devops/nexus3:0.0.1   node3  Shutdown       Complete 8 seconds ago

日志(docker service logs -f nexus_nexus)没有提供任何信息说明为什么我的第二个实例不保持运行状态,而是始终完成并重新启动。 是否可能存在I / O冲突,因为这两个实例都尝试在它们部署在指向相同主机目录的节点上使用卷(请参见我的卷定义中的device)? 还是有人知道这里出了什么问题?

0 个答案:

没有答案