2017-02-10 16 views
1

У нас есть приложение GO, которое прослушивает изменения кода репо и сообщения Redis для применения компакт-диска в среде Docker Swarm. Это приложение было недавно обновлено для использования клиентского кода github.com/docker/docker v1.13.1. Он работал на моем mac, который запускает Docker v1.13.1. Когда я развертываю этот код на сервере разработки под управлением Ubuntu и Docker v1.12.6, я получаю ошибку «EOF» при попытке позвонить cli.ServiceUpdate(..). Насколько мне известно, клиент CLI поддерживает обратную совместимость (до версии v1.10.x или что-то еще). При просмотре кода и скриншота соединение между ними - это сообщение журнала «Ошибка при обновлении службы».Ошибка обновления службы Docker: EOF

событий думали, что мы используем версию v1.13.1 библиотек golang мы указываем апи версии 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) 
    } 
} 

Вот захват экрана, что произошло в системном журнале:

Docker 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 

Любые идеи о том, что я могу делать неправильно?

ответ

0

Оказалось, что это случайность. Мы восстановили рой, остановив демона докеров, удалив/var/lib/docker и запустив демон. После этого ошибка больше не возникает.