@@ -43,10 +43,10 @@ func dockerDiscoverBackupTargets(ctx context.Context, dockerEndpoint string) ([]
4343
4444 targets := []ubtypes.BackupTarget {}
4545
46- for _ , inspected := range inspecteds {
46+ for _ , container := range inspecteds {
4747 foundBackupCommand := ""
4848
49- for _ , envSerialized := range inspected .Config .Env {
49+ for _ , envSerialized := range container .Config .Env {
5050 key , value := envvar .Parse (envSerialized )
5151 if key == backupCommandEnvKey {
5252 foundBackupCommand = value
@@ -57,36 +57,49 @@ func dockerDiscoverBackupTargets(ctx context.Context, dockerEndpoint string) ([]
5757 continue
5858 }
5959
60- serviceName := inspected .Config .Labels [udocker .SwarmServiceNameLabelKey ]
60+ serviceName := container .Config .Labels [udocker .SwarmServiceNameLabelKey ]
6161 if serviceName == "" {
6262 serviceName = "none"
6363 }
6464
65- // Docker CLI truncates ids to this long. using same here to shorten filenames
66- taskId := inspected .Id [0 :12 ]
67-
68- // FIXME: this doesn't support spaces..
69- backupCommandParsed := strings .Split (foundBackupCommand , " " )
70-
71- dockerExecCmd := append ([]string {
72- "docker" ,
73- "exec" ,
74- taskId ,
75- }, backupCommandParsed ... )
76-
77- snapshotter := newCommandOutputSnapshotter (dockerExecCmd , "" )
65+ snapshotter := createSnapshotter (foundBackupCommand , container )
66+ if snapshotter == nil { // warning was logged
67+ continue
68+ }
7869
7970 targets = append (targets , ubtypes.BackupTarget {
8071 ServiceName : serviceName ,
81- TaskId : taskId ,
72+ TaskId : dockerShortenContainerId ( container ), // for shorter backup filenames
8273 Snapshotter : snapshotter ,
8374 })
8475 }
8576
8677 return targets , nil
8778}
8879
89- func inspectAllContainers (ctx context.Context , containerMetas []udocker.ContainerListItem , base string , dockerClient * http.Client ) ([]udocker.Container , error ) {
80+ // "cat /data/example.db" => ["docker", "exec", "cat", "/data/example.db"]
81+ func createSnapshotter (
82+ backupCommand string ,
83+ container udocker.Container ,
84+ ) ubtypes.Snapshotter {
85+ // FIXME: this doesn't support spaces..
86+ backupCommandParts := strings .Split (backupCommand , " " )
87+
88+ dockerExecCmd := append ([]string {
89+ "docker" ,
90+ "exec" ,
91+ dockerShortenContainerId (container ), // for less verbose log messages
92+ }, backupCommandParts ... )
93+
94+ return newCommandOutputSnapshotter (dockerExecCmd , "" )
95+ }
96+
97+ func inspectAllContainers (
98+ ctx context.Context ,
99+ containerMetas []udocker.ContainerListItem ,
100+ base string ,
101+ dockerClient * http.Client ,
102+ ) ([]udocker.Container , error ) {
90103 containers := []udocker.Container {}
91104
92105 for _ , meta := range containerMetas {
@@ -107,3 +120,8 @@ func inspectAllContainers(ctx context.Context, containerMetas []udocker.Containe
107120
108121 return containers , nil
109122}
123+
124+ func dockerShortenContainerId (container udocker.Container ) string {
125+ // Docker CLI truncates ids to this long
126+ return container .Id [0 :12 ]
127+ }
0 commit comments