作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我在这里学习 Docker Compose 教程 https://docs.docker.com/get-started/part5/#recap-optional
version: "3"
services:
web:
image: example/get-started:part-1
deploy:
replicas: 10
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
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:
- ./data:/data
deploy:
placement:
constraints: [node.role == manager]
networks:
- webnet
driver:
build: .
links:
- redis
networks:
webnet:
虽然 Redis 似乎在 myvm1 上运行,但应用程序无法连接到它,并给出错误。
这是重要的应用程序代码:
from flask import Flask
from redis import Redis, RedisError
import os
import socket
redis = Redis(host="redis", db=0, socket_connect_timeout=0, socket_timeout=0)
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)
虚拟机 IP:
myvm1 - virtualbox Running tcp://192.168.99.101:2376
v17.07.0-cemyvm2 - virtualbox Running tcp://192.168.99.102:2376
v17.07.0-ce
Redis 在虚拟机上正常运行。
有什么想法吗?网上有很多类似的讨论,但都没有帮助。
最佳答案
如果 redis 在 VM 上运行,则绑定(bind)可能不正确。您能否检查它是否绑定(bind)在 0.0.0.0 上,否则您需要编辑 redis配置绑定(bind)到 0.0.0.0 和外部服务连接到它的端口
关于 docker 组成 : Cannot connect to Redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46006260/
我是一名优秀的程序员,十分优秀!