@@ -155,6 +155,8 @@ func Normalize(project *types.Project, resolvePaths bool) error {
155155 return err
156156 }
157157
158+ inferImplicitDependencies (& s )
159+
158160 project .Services [i ] = s
159161 }
160162
@@ -171,6 +173,61 @@ func Normalize(project *types.Project, resolvePaths bool) error {
171173 return nil
172174}
173175
176+ // IsServiceDependency check the relation set by ref refers to a service
177+ func IsServiceDependency (ref string ) (string , bool ) {
178+ if strings .HasPrefix (
179+ ref ,
180+ types .ServicePrefix ,
181+ ) {
182+ return ref [len (types .ServicePrefix ):], true
183+ }
184+ return "" , false
185+ }
186+
187+ func inferImplicitDependencies (service * types.ServiceConfig ) {
188+ var dependencies []string
189+
190+ maybeReferences := []string {
191+ service .NetworkMode ,
192+ service .Ipc ,
193+ service .Pid ,
194+ service .Uts ,
195+ service .Cgroup ,
196+ }
197+ for _ , ref := range maybeReferences {
198+ if dep , ok := IsServiceDependency (ref ); ok {
199+ dependencies = append (dependencies , dep )
200+ }
201+ }
202+
203+ for _ , vol := range service .VolumesFrom {
204+ spec := strings .Split (vol , ":" )
205+ if len (spec ) == 0 {
206+ continue
207+ }
208+ if spec [0 ] == "container" {
209+ continue
210+ }
211+ dependencies = append (dependencies , spec [0 ])
212+ }
213+
214+ for _ , link := range service .Links {
215+ dependencies = append (dependencies , strings .Split (link , ":" )[0 ])
216+ }
217+
218+ if len (dependencies ) > 0 && service .DependsOn == nil {
219+ service .DependsOn = make (types.DependsOnConfig )
220+ }
221+
222+ for _ , d := range dependencies {
223+ if _ , ok := service .DependsOn [d ]; ! ok {
224+ service .DependsOn [d ] = types.ServiceDependency {
225+ Condition : types .ServiceConditionStarted ,
226+ }
227+ }
228+ }
229+ }
230+
174231// setIfMissing adds a ServiceDependency for service if not already defined
175232func setIfMissing (d types.DependsOnConfig , service string , dep types.ServiceDependency ) types.DependsOnConfig {
176233 if d == nil {
0 commit comments