docker堆栈: Redis not working on worker node

标签 docker redis docker-compose docker-swarm

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

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服务。

最佳答案

您需要在所有容器中使用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,

卡洛斯

关于docker堆栈: Redis not working on worker node,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58293440/

相关文章:

python - Flask session UnpickleError

redis - 我如何知道正在运行的 redis 实例的当前配置

docker - 如何在Docker Entrypoint中启动以下服务

node.js - 在 Docker 构建中找不到 TSC

nvidia Jetson Nano 上的 Docker 未执行

docker - 在Ubuntu的VirtualBox上运行docker时是否可以避免端口转发?

docker - 如何测试 gcr.io 中是否已存在 docker 镜像的特定标签?

docker - 在Kubernetes中使用容器存储/共享数据

postgresql - 用于分布式环境的 Broadleaf Ehcache 到 Redis

php - PHP脚本无法从卷中看到目录