@@ -29,10 +29,10 @@ const (
29
29
var systemVolumes = []string {"/sys" , "/lib" , "/proc" }
30
30
31
31
// RunContainer runs specified container.
32
- func RunContainer (r runners.Runner , c * resources.AppConfig ) ( string , error ) {
32
+ func RunContainer (r runners.Runner , c * resources.AppConfig ) error {
33
33
hostInfo , err := host .Info ()
34
34
if err != nil {
35
- return "" , errors .Wrap (err , "failed to get host info" )
35
+ return errors .Wrap (err , "failed to get host info" )
36
36
}
37
37
38
38
// Directly mount PGDATA if Database Lab is running without any virtualization.
@@ -43,21 +43,22 @@ func RunContainer(r runners.Runner, c *resources.AppConfig) (string, error) {
43
43
// We cannot use --volumes-from because it removes the ZFS mount point.
44
44
volumes , err = getMountVolumes (r , c , hostInfo .Hostname )
45
45
if err != nil {
46
- return "" , errors .Wrap (err , "failed to detect container volumes" )
46
+ return errors .Wrap (err , "failed to detect container volumes" )
47
47
}
48
48
}
49
49
50
50
unixSocketCloneDir := c .Pool .SocketCloneDir (c .CloneName )
51
51
52
52
if err := createSocketCloneDir (unixSocketCloneDir ); err != nil {
53
- return "" , errors .Wrap (err , "failed to create socket clone directory" )
53
+ return errors .Wrap (err , "failed to create socket clone directory" )
54
54
}
55
55
56
56
containerFlags := make ([]string , 0 , len (c .ContainerConf ))
57
57
for flagName , flagValue := range c .ContainerConf {
58
58
containerFlags = append (containerFlags , fmt .Sprintf ("--%s=%s" , flagName , flagValue ))
59
59
}
60
60
61
+ // TODO (akartasov): use Docker client instead of command execution.
61
62
instancePort := strconv .Itoa (int (c .Port ))
62
63
dockerRunCmd := strings .Join ([]string {
63
64
"docker run" ,
@@ -68,14 +69,23 @@ func RunContainer(r runners.Runner, c *resources.AppConfig) (string, error) {
68
69
strings .Join (volumes , " " ),
69
70
"--label" , labelClone ,
70
71
"--label" , c .Pool .Name ,
71
- "--network" , c .NetworkID ,
72
72
strings .Join (containerFlags , " " ),
73
73
c .DockerImage ,
74
74
"-p" , instancePort ,
75
75
"-k" , unixSocketCloneDir ,
76
76
}, " " )
77
77
78
- return r .Run (dockerRunCmd , true )
78
+ if _ , err := r .Run (dockerRunCmd , true ); err != nil {
79
+ return errors .Wrap (err , "failed to run command" )
80
+ }
81
+
82
+ dockerConnectCmd := strings .Join ([]string {"docker network connect" , c .NetworkID , c .CloneName }, " " )
83
+
84
+ if _ , err := r .Run (dockerConnectCmd , true ); err != nil {
85
+ return errors .Wrap (err , "failed to connect container to the internal DLE network" )
86
+ }
87
+
88
+ return nil
79
89
}
80
90
81
91
func getMountVolumes (r runners.Runner , c * resources.AppConfig , containerID string ) ([]string , error ) {
0 commit comments