泊坞窗堆栈:Redis在工作节点上不起作用

时间:2019-10-08 20:12:16

标签: docker redis docker-compose docker-swarm

我刚刚完成了docker文档,并在aws(http://13.127.150.218http://13.235.134.73)上创建了两个实例。第一个是经理,第二个是工人。以下是我用来部署的组合文件

version: "3"
services:
  web:
    # replace username/repo:tag with your name and image details
    image: username/repo:tag
    deploy:
      replicas: 5
      restart_policy:
        condition: on-failure
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
    ports:
      - "80:80"
    networks:
      - webnet
  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]
    networks:
      - webnet
  redis:
    image: redis
    ports:
      - "6379:6379"
    volumes:
      - "/home/docker/data:/data"
    deploy:
      placement:
        constraints: [node.role == manager]
    command: redis-server --appendonly yes
    networks:
      - webnet
networks:
  webnet:

此处,redis服务具有将其限制为仅在管理器节点上运行的约束。现在,我的问题是,如何在工作实例上使用Web服务来使用Redis服务。

2 个答案:

答案 0 :(得分:3)

您需要在所有容器中使用hostname参数,以便您可以使用此值从worker访问服务或从worker访问manager上的服务。

version: "3"
services:
  web:
    # replace username/repo:tag with your name and image details
    image: username/repo:tag
    hostname: "web"
    deploy:
      replicas: 5
      restart_policy:
        condition: on-failure
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
    ports:
      - "80:80"
    networks:
      - webnet
  visualizer:
    image: dockersamples/visualizer:stable
    hostname: "visualizer"
    ports:
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]
    networks:
      - webnet
  redis:
    image: redis
    hostname: "redis"
    ports:
      - "6379:6379"
    volumes:
      - "/home/docker/data:/data"
    deploy:
      placement:
        constraints: [node.role == manager]
    command: redis-server --appendonly yes
    networks:
      - webnet
networks:
  webnet:

令人上瘾的是,如果使用portainer而不是可视化工具,则可以使用更多选项来控制SWARM堆栈:

https://hub.docker.com/r/portainer/portainer

BR,

卡洛斯

答案 1 :(得分:2)

按照以下示例考虑堆栈文件- enter image description here

不管管理员放置在何处,所有在同一网络上的堆栈文件中的服务都可以使用嵌入式DNS功能,该功能有助于按定义的服务名称解析每个服务。 在这种情况下,服务web通过服务名称使用服务redis

以下是ping命令的示例,该命令能够从与Redis服务关联的容器内解析服务web- enter image description here

详细了解Swarm Native Service Discovery,以了解这一点。