我按照這裏的碼頭工人撰寫教程 https://docs.docker.com/get-started/part5/#recap-optional碼頭工人撰寫:無法連接到Redis的
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)
VM IP地址:
myvm1 - VirtualBox的運行TCP://192.168.99.101:2376
v17.07.0策myvm2 - VirtualBox的運行TCP://192.168.99.102:2376
v17.07.0策
Redis在虛擬機上運行時沒有錯誤。
有什麼想法?網上有很多類似的討論,但都沒有幫助。
你能使用netcat或telnet連接到正在運行的redis嗎?在港口6379? –
您的驅動程序容器是否應該鏈接到redis的應用程序代碼? –
@WillBarnwell是的它在0.0.0.0 –