2016-07-28 9 views
6

के लिए डॉकर का उपयोग करके संवाद नहीं कर सकता है। मैं दो कंटेनर प्राप्त करने की कोशिश कर रहा हूं जो प्रत्येक एक अलग गोलांग सेवा चला रहे हैं। दोनों सेवाएं net/http पैकेज के साथ बनाई गई थीं। मेरे पास एक एपीआई फ्रंटएंड एक और एक प्रमाणीकरण सेवा बैकएंड है।गोलांग माइक्रोस्कोर्सेस मैक

version: "2" 
services: 
    staticfiles: 
    build: ./files 
    volumes: 
     - /public 
     - /views 
    api: 
    build: ./api 
    environment: 
     - PORT=8080 
     - BASE_URL=https://example.org 
     - AUTH_HOST=auth 
     - AUTH_PORT=8080 
     - VIEW_DIR=/views 
     - PUBLIC_DIR=/public 
    ports: 
     - "80:8080" 
    volumes_from: 
     - staticfiles:ro 
    links: 
     - auth 
    depends_on: 
     - staticfiles 
    db: 
    build: ./postgres 
    environment: 
     - POSTGRES_USER=inheritor 
     - POSTGRES_DB=inheritor 
    auth: 
    build: ./auth 
    expose: 
     - "8080" 
    environment: 
     - PORT=8080 
     - DB_USER=inheritor 
     - DB_NAME=inheritor 
     - DB_HOST=db 
     - DB_Port=5432 
    links: 
     - db 

मैं जानता हूँ कि लिंक एपीआई कंटेनर मैं ping auth और curl -X Post http://auth:8080/validate लेकिन golang भीतर मैं एक dial address tcp i/o timeout प्राप्त कर सकते हैं क्योंकि काम कर रहे हैं:

यहाँ मेरी लिखें फ़ाइल है। गोलांग कोड यहाँ है।

var (
    authString = "http://" + env.AuthHost + ":" + env.AuthPort 
) 

//ValidateToken validates a token using the session in DB 
func ValidateToken(req *model.ValidateRequest) (*model.JWTClaims, error) { 
    client := new(http.Client) 
    api := authString + "/validate" 
    cont, err := model.Jsonify(req) 
    if err != nil { 
     return nil, exception.NewInternalError("Could not turn the request into a json object.") 
    } 

    request, err := http.NewRequest("POST", api, bytes.NewBuffer(cont)) 
    if err != nil { 
     return nil, exception.NewInternalError("Could not create request: " + err.Error()) 
    } 
    request.Header.Set("Content-type", "application/json") 
    response, err := client.Do(request) 
    if err != nil { 
     return nil, exception.NewInternalError("Could not make the request: " + err.Error()) 
    } 
    defer response.Body.Close() 

    res := new(model.AuthResponse) 
    res.Claims = new(model.JWTClaims) 
    decoder := json.NewDecoder(response.Body) 
    err = decoder.Decode(&res) 
    spew.Dump(response.Body) 
    if err != nil { 
     return nil, exception.NewInternalError("Could not parse response back from auth service. " + err.Error()) 
    } 

    if response.StatusCode != http.StatusOK { 
     return nil, exception.NewInvalidJWTError(res.Error) 
    } 

    return res.Claims, nil 
} 

client.Do(request) डायल त्रुटि फेंक रहा है। अब मेरी प्रमाणन सेवा भी छुआ नहीं किया जा रहा क्योंकि मैं एक लकड़हारा हर अनुरोध है कि में आ रहा है स्क्रीन करने के लिए प्रिंट कि है।

  • env.AuthHostAUTH_HOST वातावरण चर को मैप किया है।
  • env.AuthPortAuth_PORT पर्यावरण चर के लिए मैप किया गया है।

बहुत मदद की सराहना की जाती है।

यदि यह मैकोज़क्स चलाने में मदद करता है।

Client: 
Version:  1.12.0-rc4 
API version: 1.24 
Go version: go1.6.2 
Git commit: e4a0dbc 
Built:  Wed Jul 13 03:28:51 2016 
OS/Arch:  darwin/amd64 
Experimental: true 

Server: 
Version:  1.12.0-rc4 
API version: 1.24 
Go version: go1.6.2 
Git commit: e4a0dbc 
Built:  Wed Jul 13 03:28:51 2016 
OS/Arch:  linux/amd64 
Experimental: true 

दोनों golangs Dockerfile इस तरह दिखता है:

FROM golang:1.6 
RUN mkdir -p /go/src/github.com/dixonwille/Inheritor/api 
WORKDIR /go/src/github.com/dixonwille/Inheritor/api 

COPY . /go/src/github.com/dixonwille/Inheritor/api 

RUN go build -v -o Inheritor cmd/Inheritor/main.go 

USER nobody 
ENTRYPOINT ["./Inheritor"] 

संपादित करें:

तो मैं golang भीतर net.LookupHost(env.AuthHost) भाग गया और यह तो एक अलग आईपी पते लौटने ping, curl, और यहां तक docker inspect। क्या यह एक गोलांग चीज है?

संपादित करें:

सभी संपादन तरह का रूप दिन चला जाता है डिबग करने के लिए कोशिश कर रहा है के लिए क्षमा करें।

यदि मैं authString के बंदरगाह भाग को हटा देता हूं, तो अनुरोध प्राप्त होता है लेकिन प्रतिक्रिया पार्स करते समय त्रुटि प्राप्त होती है। प्रतिक्रिया एनजीआईएनएक्स द्वारा 301 रीडायरेक्ट है जो मुझे लगता है कि अजीब है क्योंकि यह मेरे ढेर में भी नहीं है। रीडायरेक्ट के लिए स्थान शीर्षलेख localhost है, जो मुझे लगता है कि अजीब भी है।

मैंने मेजबान मशीन पर एक बंदरगाह खोलने और उस बंदरगाह के साथ इसे बेहतर भाग्य (समान होस्टनाम) के साथ एक्सेस करने का प्रयास किया है।

संपादित करें:

तो यह एक मैक केवल एक चीज मुझे लगता है। मैंने रेपो को क्लोन कर दिया और विंडोज 10 पर भाग गया और मैं अपनी ऑथ सेवा से जुड़ने में सक्षम था। मैक त्रुटि के लिए यह डॉकर होगा? मैं शायद उन्हें रिपोर्ट करने जा रहा हूं, लेकिन मैं इसे बंद नहीं मानूंगा क्योंकि यह अभी भी मैक उपयोगकर्ताओं के लिए एक मुद्दा है।

+0

मुझे क्लाइंट नहीं लगता है। पुनः प्रयास करें, आप ऑनलाइन होने पर जीआरपीसी सर्वर के बेहतर मौके के लिए डायल करने से पहले 'टाइम। स्लीप (10 * टाइम सेकेंड)' जोड़ने का प्रयास कर सकते हैं। आप 'links: -db' को 'depend_on: -db' – Plato

+0

के साथ बदलने का भी प्रयास कर सकते हैं, मुझे नहीं लगता कि कॉल से 10 सेकंड पहले कैसे मदद मिलेगी? यह एक निरंतर त्रुटि है। हर बार जब मैं इस विधि को एक ही त्रुटि की कोशिश करता हूं और हिट करता हूं, हर बार, कोई कंटेनर पुनरारंभ नहीं होता है। और मुझे लिंक की आवश्यकता नहीं होगी, इसलिए मुझे आईपी पता पकड़ लिया जा सकता है? – Clemsonopoly94

उत्तर

1

तो मैक के लिए डॉकर आज एक नए बीटा संस्करण के साथ बाहर आया। ऐसा लगता है कि कनेक्टिंग के साथ मेरी समस्या तय हो गई है।अब जब मैंने पाया कि यह मेरे विंडोज पीसी पर काम करता है तो मैंने सोर्स कोड में बदलाव किए हैं। यहाँ

Client: 
Version:  1.12.0 
API version: 1.24 
Go version: go1.6.3 
Git commit: 8eab29e 
Built:  Thu Jul 28 21:04:48 2016 
OS/Arch:  darwin/amd64 
Experimental: true 

Server: 
Version:  1.12.0 
API version: 1.24 
Go version: go1.6.3 
Git commit: 8eab29e 
Built:  Thu Jul 28 21:04:48 2016 
OS/Arch:  linux/amd64 
Experimental: true 

और लिखें फ़ाइल है::

यहाँ ठीक लिए डोकर का संस्करण है

version: "2" 
services: 
    staticfiles: 
    build: ./files 
    volumes: 
     - /public 
     - /views 
     - /migrations 
    databasefiles: 
    build: ./databasefiles 
    volumes: 
     - /var/lib/postgresql/data 
    db: 
    build: ./postgres 
    depends_on: 
     - databasefiles 
    volumes_from: 
     - databasefiles 
    environment: 
     - POSTGRES_USER=inheritor 
     - POSTGRES_DB=inheritor 
    auth: 
    build: ./auth 
    expose: 
     - "8080" 
    depends_on: 
     - staticfiles 
    volumes_from: 
     - staticfiles:ro 
    environment: 
     - PORT=8080 
     - DB_USER=inheritor 
     - DB_NAME=inheritor 
     - DB_HOST=db 
     - DB_PORT=5432 
     - MIGRATION_DIR=/migrations 
    links: 
     - db 
    api: 
    build: ./api 
    environment: 
     - PORT=8080 
     - BASE_URL=https://example.org 
     - AUTH_HOST=auth 
     - AUTH_PORT=8080 
     - VIEW_DIR=/views 
     - PUBLIC_DIR=/public 
    ports: 
     - "80:8080" 
    volumes_from: 
     - staticfiles:ro 
    links: 
     - auth 
    depends_on: 
     - staticfiles 

मैं चारों ओर ले जाने के लिए सेवाओं की थी, लेकिन मैं कुछ भी अलग है कि बदल जाएगा नहीं दिख रहा है कंटेनरों के बीच संचार। यह सिर्फ यहां दूसरों को एक ही समस्या है।