docker - Redis 不会作为 docker 容器内的服务启动
问题描述
我对 docker 很陌生,所以我按照他们的官方教程并尝试了适用于我的工作项目的“快捷方式”。我有以下 docker-compose.yml:
version: "3"
services:
web:
# replace username/repo:tag with your name and image details
image: my_image
deploy:
replicas: 5
restart_policy:
condition: on-failure
resources:
limits:
cpus: "0.1"
memory: 50M
ports:
- "4000:80"
networks:
- webnet
redis:
image: redis
ports:
- "6379:6379"
volumes:
- "/home/docker/data:/data"
command: redis-server --appendonly yes
networks:
- webnet
networks:
webnet:
my_image 是一个简单的烧瓶应用程序,它启动 Flask 和 Redis,然后打印访问次数:
from flask import Flask
from redis import Redis, RedisError
import os
import socket
# Connect to Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)
app = Flask(__name__)
@app.route("/")
def hello():
try:
visits = redis.incr("counter")
except RedisError:
visits = "<i>cannot connect to Redis, counter disabled</i>"
html = "<h3>Hello {name}!</h3>" \
"<b>Hostname:</b> {hostname}<br/>" \
"<b>Visits:</b> {visits}"
return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80)
在此处查看Dockerfile
当我像这样开始一个群时:
sudo docker swarm init --advertise-addr <ip>
sudo docker stack deploy -c docker-compose.yml flask_with_redis
图像开始正常,my_image
我可以看到它在 127.0.0.1:4000 上运行,但 Redis 永远不会启动。我怀疑我的 有问题docker-compose.yml
,尤其是redis
服务,因为my_image
运行良好。此外,Redis 和 Flask 肯定是my_image
通过 running添加到的requirements.py
。有没有人经历过类似的事情?你能帮我吗?
解决方案
感谢您的帮助 Prathis 和 Bret Fisher。事实证明,解决方案更简单:我只需要“坚持”Docker 教程,然后离开
placement:
constraints: [node.role == manager]
所以完整的(工作的) docker-compile.yml 看起来像这样:
version: "3"
services:
web:
# replace username/repo:tag with your name and image details
image: my_image
deploy:
replicas: 5
restart_policy:
condition: on-failure
resources:
limits:
cpus: "0.1"
memory: 50M
ports:
- "4000:80"
networks:
- webnet
redis:
image: redis:latest
deploy:
placement:
constraints: [node.role == manager]
ports:
- "6379:6379"
command: redis-server --appendonly yes
networks:
- webnet
networks:
webnet:
这个容器运行 Redis 很好