gpt4 book ai didi

docker - Redis 不会作为 docker 容器内的服务启动

转载 作者:可可西里 更新时间:2023-11-01 11:15:12 25 4
gpt4 key购买 nike

我是 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 应用程序,它启动 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 here

当我像这样开始群时:

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 运行正常。此外,通过运行 requirements.py,Redis 和 Flask 肯定会添加到 my_image 中。有没有人经历过类似的事情?你能帮我吗?

最佳答案

感谢 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

关于docker - Redis 不会作为 docker 容器内的服务启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51196897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com