के लिए डॉकर का उपयोग करके संवाद नहीं कर सकता है। मैं दो कंटेनर प्राप्त करने की कोशिश कर रहा हूं जो प्रत्येक एक अलग गोलांग सेवा चला रहे हैं। दोनों सेवाएं 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.AuthHost
AUTH_HOST
वातावरण चर को मैप किया है।env.AuthPort
Auth_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 पर भाग गया और मैं अपनी ऑथ सेवा से जुड़ने में सक्षम था। मैक त्रुटि के लिए यह डॉकर होगा? मैं शायद उन्हें रिपोर्ट करने जा रहा हूं, लेकिन मैं इसे बंद नहीं मानूंगा क्योंकि यह अभी भी मैक उपयोगकर्ताओं के लिए एक मुद्दा है।
मुझे क्लाइंट नहीं लगता है। पुनः प्रयास करें, आप ऑनलाइन होने पर जीआरपीसी सर्वर के बेहतर मौके के लिए डायल करने से पहले 'टाइम। स्लीप (10 * टाइम सेकेंड)' जोड़ने का प्रयास कर सकते हैं। आप 'links: -db' को 'depend_on: -db' – Plato
के साथ बदलने का भी प्रयास कर सकते हैं, मुझे नहीं लगता कि कॉल से 10 सेकंड पहले कैसे मदद मिलेगी? यह एक निरंतर त्रुटि है। हर बार जब मैं इस विधि को एक ही त्रुटि की कोशिश करता हूं और हिट करता हूं, हर बार, कोई कंटेनर पुनरारंभ नहीं होता है। और मुझे लिंक की आवश्यकता नहीं होगी, इसलिए मुझे आईपी पता पकड़ लिया जा सकता है? – Clemsonopoly94