2017-02-10 6 views
1

Docker Swarm 환경에서 CD를 적용하기 위해 코드 저장소 변경 및 Redis 메시지를 수신하는 GO 응용 프로그램이 있습니다. 이 응용 프로그램은 최근 github.com/docker/docker v1.13.1 클라이언트 코드를 사용하도록 업데이트되었습니다. 그것은 Docker v1.13.1을 실행하는 내 Mac에서 일했습니다. Ubuntu 및 Docker v1.12.6을 실행하는 개발 서버에이 코드를 배포하면 cli.ServiceUpdate(..)을 호출 할 때 "EOF"오류가 발생합니다. 내가 아는 한 CLI 클라이언트는 이전 버전과 호환됩니다 (v1.10.x 또는 그 전까지). 코드와 스크린 샷을 볼 때 두 서비스 사이의 연결은 "서비스를 업데이트하는 중 오류가 발생했습니다"라는 로그 메시지입니다.Docker 서비스 업데이트 오류 : EOF

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) 
    } 
} 
: 여기
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) 
     } 
    } 
} 

가 잘못된 코드 :

이벤트는 우리가, 우리는 우리의 클라이언트 초기화의 API 버전 v1.24를 지정 golang 라이브러리의 v1.13.1 버전을 사용하는 생각

Docker Syslog

: 여기

는 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

어딘가에 우연히 발견되었습니다. docker 데몬을 중지하고/var/lib/docker를 제거하고 데몬을 다시 시작하여 swarm을 재구성했습니다. 그 후에 오류가 더 이상 발생하지 않았습니다.