2017-09-01 67 views
0

我按照這裏的碼頭工人撰寫教程 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在虛擬機上運行時沒有錯誤。

有什麼想法?網上有很多類似的討論,但都沒有幫助。

+0

你能使用netcat或telnet連接到正在運行的redis嗎?在港口6379? –

+0

您的驅動程序容器是否應該鏈接到redis的應用程序代碼? –

+0

@WillBarnwell是的它在0.0.0.0 –

回答

0

如果redis在虛擬機上運行,​​綁定可能不正確。你能檢查它的綁定是否在0.0.0.0或者你需要編輯redis 配置綁定在0.0.0.0和端口上以便連接到它的外部服務

+0

感謝您的快速回復。這是它顯示*:6379-> 6379/tcp。那是對的嗎?如果我需要編輯redis配置,請列出它的路徑嗎? –

+0

它將在redis.conf中查找條目'bind 127.0.0.1'並將其更改爲'bind 0.0.0.0' – samsudh

+0

非常感謝。唉,它仍然無法正常工作。如果我達成解決方案,我會更新 –