运行已编译的golang脚本时出错

时间:2017-01-10 15:16:20

标签: ubuntu go docker

我在项目中使用指定修订版的github.com/sideshow/apns2来发送IOS推送通知。 go 1.7.4 位于docker容器内,我在那里编译了应用程序并将二进制文件拉到了主机上。当我在主机上运行二进制文件时,它会抛出下一个错误:

Error Message: Post https://api.push.apple.com/3/device/{device_token}: dial tcp: lookup api.push.apple.com on 127.0.1.1:53: read udp 127.0.0.1:33891->127.0.1.1:53: i/o timeout

但是在docker内部运行可以正常工作。

这是代码的一部分:

import (
    "os"
    "strings"
    apns "github.com/sideshow/apns2"
    "github.com/sideshow/apns2/token"
)

var ApnsClient *apns.Client

authKey, err := token.AuthKeyFromBytes([]byte(strings.Replace(os.Getenv("APNS_AUTH_KEY"), "\\n", "\n", -1)))
if err != nil {
    return err
}

Token := &token.Token{
    AuthKey: authKey,
    KeyID:   os.Getenv("APNS_KEY_ID"),
    TeamID:  os.Getenv("APNS_TEAM_ID"),
}

if os.Getenv("APNS_PRODUCTION") == "1" {
    ApnsClient = apns.NewTokenClient(Token).Production()
} else {
    ApnsClient = apns.NewTokenClient(Token).Development()
}

notification := &apns.Notification{
    Payload: {payload},
    Topic: {bundle id},
    DeviceToken: {device_token}
}

res, err := ApnsClient.Push(notification)

res 中的HTTP状态为200

任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您的DNS解析似乎已疯狂地编译到您的可执行文件中:127.0.0.1:33891-> 127.0.1.1:53

这里看到的是docker与本地host-dns服务器的端口绑定。这在主机上不起作用,但将这个“路径”编译到go-executable中也没有意义。

可能你正在编译一个静态连接字符串到APP中,为了连接到DNS服务器,我真的不能在这里猜测。