我刚刚完成了 docker 文档并在 aws 上创建了两个实例( http://13.127.150.218 、 http://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/