Ubuntu Docker服务更新错误:EOF

Ubuntu Docker服务更新错误:EOF,ubuntu,go,docker,docker-swarm,docker-swarm-mode,Ubuntu,Go,Docker,Docker Swarm,Docker Swarm Mode,我们有一个GO应用程序,它监听代码repo更改和Redis消息,以便在Docker Swarm环境中应用CD。该应用程序最近更新为使用github.com/docker/dockerv1.13.1客户端代码。它在我的mac上运行,它运行DockerV1.13.1。当我将此代码部署到运行Ubuntu和Docker v1.12.6的开发服务器时,在尝试调用cli.ServiceUpdate(…)时,会出现“EOF”错误。据我所知,CLI客户端是向后兼容的(直到v1.10.x或其他版本)。当查看代码和

我们有一个GO应用程序,它监听代码repo更改和Redis消息,以便在Docker Swarm环境中应用CD。该应用程序最近更新为使用
github.com/docker/docker
v1.13.1客户端代码。它在我的mac上运行,它运行DockerV1.13.1。当我将此代码部署到运行Ubuntu和Docker v1.12.6的开发服务器时,在尝试调用
cli.ServiceUpdate(…)
时,会出现“EOF”错误。据我所知,CLI客户端是向后兼容的(直到v1.10.x或其他版本)。当查看代码和屏幕截图时,两者之间的连接是“更新服务时出错”的日志消息

虽然我们使用的是golang库的v1.13.1版本,但我们在客户端初始化中指定了api版本v1.24:

func createClient() {
    if cli == nil {
        defaultHeaders := map[string]string{"User-Agent": "engine-api-cli-1.0"}
        var err error
        cli, err = client.NewClient("unix:///var/run/docker.sock", "v1.24", nil, defaultHeaders)
        if err != nil {
            panic(err)
        }
    }
}
以下是违规代码:

func updateService(s configuration.Service, version string) {
    createClient()

    ctx := context.Background()

    service, _, err := cli.ServiceInspectWithRaw(ctx, configuration.ServiceName(s))
    if err != nil {
        fmt.Println("could not find service", err)
        return
    }

    serviceSpec := createServiceSpec(s, version)

    encodedRegistryAuth := createEncodedRegistryAuth()
    var resp types.ServiceUpdateResponse
    resp, err = cli.ServiceUpdate(ctx, service.ID, service.Version, serviceSpec, types.ServiceUpdateOptions{EncodedRegistryAuth: encodedRegistryAuth})
    if err != nil {
        fmt.Println("An error occurred while updating a service: ", s.Service, "; ", err)
    } else {
        message := "SERVICE UPDATE - " + s.Service + "_" + s.Channel + " >> " + envName + ":" + s.Service + ":" + version
        connections.SlackMessage(message)
        connections.NewRelicDeploy(version, message)
        connections.GrafanaDeploy(version, message)
        fmt.Println("Updated service", s.Service, "and waiting", s.UpdateDelay)
        fmt.Println("Warnings from service update", resp.Warnings)
    }
}
下面是syslog中发生的事件的屏幕抓图:

以下是docker info的输出:

Client:
 Version:      1.12.6
 API version:  1.24
 Go version:   go1.6.4
 Git commit:   78d1802
 Built:        Tue Jan 10 20:40:44 2017
 OS/Arch:      linux/amd64
 Experimental: true

Server:
 Version:      1.12.6
 API version:  1.24
 Go version:   go1.6.4
 Git commit:   78d1802
 Built:        Tue Jan 10 20:40:44 2017
 OS/Arch:      linux/amd64
 Experimental: true

你知道我做错了什么吗

结果是某个地方的侥幸。我们通过停止docker守护进程、删除/var/lib/docker并启动守护进程备份来重建swarm。在那之后,错误就不再发生了。

结果是某个地方的侥幸。我们通过停止docker守护进程、删除/var/lib/docker并启动守护进程备份来重建swarm。此后,错误不再发生