douzhantao2857 2016-07-28 04:18
浏览 72

Golang微服务无法使用Docker for Mac进行通信

I am trying to get two containers that are each running a different golang service. Both services were built with the net/http package. I have an API frontend as one and an Authentication service backend.

Here is my compose file:

version: "2"
    build: ./files
      - /public
      - /views
    build: ./api
      - PORT=8080
      - BASE_URL=
      - AUTH_HOST=auth
      - AUTH_PORT=8080
      - VIEW_DIR=/views
      - PUBLIC_DIR=/public
      - "80:8080"
      - staticfiles:ro
      - auth
      - staticfiles
    build: ./postgres
      - POSTGRES_USER=inheritor
      - POSTGRES_DB=inheritor
    build: ./auth
      - "8080"
      - PORT=8080
      - DB_USER=inheritor
      - DB_NAME=inheritor
      - DB_HOST=db
      - DB_Port=5432
      - db

I know the links are working because from the api container I can ping auth and curl -X Post http://auth:8080/validate but within golang I get a dial address tcp i/o timeout. Here is the golang code.

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)
    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

The client.Do(request) is what is throwing the Dial error. Now my auth service is not even being touched because I have a logger that prints to screen every request that is coming in.

  • env.AuthHost is mapped to the AUTH_HOST environment variable.
  • env.AuthPort is mapped to the Auth_PORT environment variable.

Much help is appreciated.

If it helps I am running MacOSX.

 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

 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

Both golangs Dockerfile looks like this:

FROM golang:1.6
RUN mkdir -p /go/src/
WORKDIR /go/src/

COPY . /go/src/

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

USER nobody
ENTRYPOINT ["./Inheritor"]


So I ran net.LookupHost(env.AuthHost) within golang and it is returning a different IP address then ping, curl, and even docker inspect. Is this a golang thing then?


Sorry for all the edits kind of trying to debug as the day goes.

If I remove the port portion of the authString, the request goes through but get an error when parsing response. The response is a 301 redirect by NGINX which I think is strange because that is not even in my stack. The location header for the redirect is localhost, which I think is strange as well.

I have tried exposing a port on the host machine and accessing it with that port with no better luck (same hostname).


So it is a Mac only thing I assume. I cloned down the repo and ran on Windows 10 and I was able to connect to my auth service. Would this be Docker for Mac error? I am probably going to report it to them, but I would not consider this closed since it still is an issue for Mac users.

  • 写回答



      相关推荐 更多相似问题


      • ¥20 苹果app名字侵权商标,我投诉了,但是苹果一直没回怎么办
      • ¥15 Android studio运行不成功总是报错
      • ¥15 pycharm 加载软件包列表时出错connect timed out
      • ¥15 和您碰到了同一个问题
      • ¥15 如何在微信支付V3PHP版请求中添加header?
      • ¥15 在数字信号处理中用MATLAB显示波形。
      • ¥15 keil MDK软件进行仿真调试的局限
      • ¥15 关于gateway产生临时文件夹的问题
      • ¥15 Java Broken Pipe以及OOM
      • ¥20 请问有没有RTL8211FS的参考原理图