@@ -28,15 +28,19 @@ const (
2828)
2929
3030// Setup creates a new internal Docker network and connects container to it.
31- func Setup (ctx context.Context , dockerCLI * client.Client , instanceID , containerID string ) (string , error ) {
31+ func Setup (ctx context.Context , dockerCLI * client.Client , instanceID , containerName string ) (string , error ) {
3232 networkName := getNetworkName (instanceID )
3333
3434 log .Dbg ("Discovering internal network:" , networkName )
3535
3636 networkResource , err := dockerCLI .NetworkInspect (ctx , networkName , types.NetworkInspectOptions {})
3737 if err == nil {
38- if err := dockerCLI .NetworkConnect (ctx , networkResource .ID , containerID , & network.EndpointSettings {}); err != nil {
39- return "" , err
38+ if ! hasContainerConnected (networkResource , containerName ) {
39+ if err := dockerCLI .NetworkConnect (ctx , networkResource .ID , containerName , & network.EndpointSettings {}); err != nil {
40+ return "" , err
41+ }
42+
43+ log .Dbg (fmt .Sprintf ("Container %s has been connected to %s" , containerName , networkName ))
4044 }
4145
4246 return networkResource .ID , nil
@@ -61,7 +65,7 @@ func Setup(ctx context.Context, dockerCLI *client.Client, instanceID, containerI
6165
6266 log .Dbg ("A new internal network has been created:" , internalNetwork .ID )
6367
64- if err := dockerCLI .NetworkConnect (ctx , internalNetwork .ID , containerID , & network.EndpointSettings {}); err != nil {
68+ if err := dockerCLI .NetworkConnect (ctx , internalNetwork .ID , containerName , & network.EndpointSettings {}); err != nil {
6569 return "" , err
6670 }
6771
@@ -108,11 +112,13 @@ func Connect(ctx context.Context, dockerCLI *client.Client, instanceID, containe
108112 return fmt .Errorf ("internal network not found: %w" , err )
109113 }
110114
111- if err := dockerCLI .NetworkConnect (ctx , networkResource .ID , containerID , & network.EndpointSettings {}); err != nil {
112- return err
113- }
115+ if ! hasContainerConnected (networkResource , containerID ) {
116+ if err := dockerCLI .NetworkConnect (ctx , networkResource .ID , containerID , & network.EndpointSettings {}); err != nil {
117+ return err
118+ }
114119
115- log .Dbg (fmt .Sprintf ("Container %s has been connected to %s" , instanceID , networkName ))
120+ log .Dbg (fmt .Sprintf ("Container %s has been connected to %s" , instanceID , networkName ))
121+ }
116122
117123 return nil
118124}
@@ -147,6 +153,16 @@ func Reconnect(ctx context.Context, dockerCLI *client.Client, instanceID, contai
147153 return nil
148154}
149155
156+ func hasContainerConnected (networkResource types.NetworkResource , containerID string ) bool {
157+ for _ , container := range networkResource .Containers {
158+ if container .Name == containerID {
159+ return true
160+ }
161+ }
162+
163+ return false
164+ }
165+
150166func getNetworkName (instanceID string ) string {
151167 return networkPrefix + instanceID
152168}
0 commit comments