@@ -1385,9 +1385,16 @@ func (engine *DockerTaskEngine) createContainer(task *apitask.Task, container *a
1385
1385
var err error
1386
1386
targetContainer , err = task .GetBridgeModePauseContainerForTaskContainer (targetContainer )
1387
1387
if err != nil {
1388
+ logger .Error ("Failed to create container" , logger.Fields {
1389
+ field .TaskID : task .GetID (),
1390
+ field .Container : container .Name ,
1391
+ field .Error : errors .New (fmt .Sprintf (
1392
+ "container uses awsfirelens log driver but we failed to resolve Firelens bridge IP: %v" , err )),
1393
+ })
1388
1394
return dockerapi.DockerContainerMetadata {
1389
- Error : dockerapi.CannotStartContainerError {FromError : errors .New (fmt .Sprintf (
1390
- "failed to start firelens container: %v" , err ))},
1395
+ Error : dockerapi.CannotCreateContainerError {FromError : errors .New (fmt .Sprintf (
1396
+ "failed to create container - container uses awsfirelens log driver but we failed to " +
1397
+ "resolve Firelens bridge IP: %v" , err ))},
1391
1398
}
1392
1399
}
1393
1400
}
@@ -1647,60 +1654,64 @@ func (engine *DockerTaskEngine) startContainer(task *apitask.Task, container *ap
1647
1654
// For bridge-mode ServiceConnect-enabled tasks, we inject pause container for each application container
1648
1655
// including the firelens container. Therefore, when resolving the container IP, we should be checking that
1649
1656
// of the associated pause container. In such case, the firelens container has network mode "container" since it's
1650
- //launched into its pause container's network namespace.
1651
- if container .GetFirelensConfig () != nil {
1652
- if ! task . IsNetworkModeAWSVPC () &&
1653
- ( container . GetNetworkModeFromHostConfig () == "" ||
1654
- container . GetNetworkModeFromHostConfig () == apitask . BridgeNetworkMode ||
1655
- ( container . GetNetworkModeFromHostConfig () == "container" && task . IsServiceConnectEnabled ())) {
1656
- _ , gotContainerIP := getContainerHostIP ( dockerContainerMD . NetworkSettings )
1657
- if task .IsServiceConnectEnabled () {
1658
- targetContainer , err := task . GetBridgeModePauseContainerForTaskContainer ( container )
1659
- if err != nil {
1660
- return dockerapi. DockerContainerMetadata {
1661
- Error : dockerapi.CannotStartContainerError { FromError : errors . New ( fmt . Sprintf (
1662
- "failed to start firelens container: %v" , err ))},
1663
- }
1657
+ // launched into its pause container's network namespace.
1658
+ if container .GetFirelensConfig () != nil && task . IsNetworkModeBridge () {
1659
+ _ , gotContainerIP := getContainerHostIP ( dockerContainerMD . NetworkSettings )
1660
+ if task . IsServiceConnectEnabled () {
1661
+ targetContainer , err := task . GetBridgeModePauseContainerForTaskContainer ( container )
1662
+ if err != nil {
1663
+ logger . Error ( "Failed to start Firelens container" , logger. Fields {
1664
+ field . TaskID : task .GetID (),
1665
+ field . Container : container . Name ,
1666
+ field . Error : err ,
1667
+ })
1668
+ return dockerapi.DockerContainerMetadata {
1669
+ Error : dockerapi. CannotStartContainerError { FromError : errors . New ( fmt . Sprintf (
1670
+ "failed to start firelens container: %v" , err ))},
1664
1671
}
1665
- _ , gotContainerIP = getContainerHostIP (targetContainer .GetNetworkSettings ())
1666
1672
}
1667
-
1668
- if ! gotContainerIP {
1669
- getIPBridgeBackoff := retry .NewExponentialBackoff (minGetIPBridgeTimeout , maxGetIPBridgeTimeout , getIPBridgeRetryJitterMultiplier , getIPBridgeRetryDelayMultiplier )
1670
- contextWithTimeout , cancel := context .WithTimeout (engine .ctx , time .Minute )
1671
- defer cancel ()
1672
- err := retry .RetryWithBackoffCtx (contextWithTimeout , getIPBridgeBackoff , func () error {
1673
- gotIPBridge := false
1674
- if task .IsServiceConnectEnabled () {
1675
- targetContainer , err := task .GetBridgeModePauseContainerForTaskContainer (container )
1676
- if err != nil {
1677
- return err
1678
- }
1679
- _ , gotIPBridge = getContainerHostIP (targetContainer .GetNetworkSettings ())
1680
- if gotIPBridge {
1681
- return nil
1682
- }
1683
- } else {
1684
- inspectOutput , err := engine .client .InspectContainer (engine .ctx , dockerContainerMD .DockerID ,
1685
- dockerclient .InspectContainerTimeout )
1686
- if err != nil {
1687
- return err
1688
- }
1689
- _ , gotIPBridge = getContainerHostIP (inspectOutput .NetworkSettings )
1690
- if gotIPBridge {
1691
- dockerContainerMD .NetworkSettings = inspectOutput .NetworkSettings
1692
- return nil
1693
- }
1673
+ _ , gotContainerIP = getContainerHostIP (targetContainer .GetNetworkSettings ())
1674
+ }
1675
+
1676
+ if ! gotContainerIP {
1677
+ getIPBridgeBackoff := retry .NewExponentialBackoff (minGetIPBridgeTimeout , maxGetIPBridgeTimeout , getIPBridgeRetryJitterMultiplier , getIPBridgeRetryDelayMultiplier )
1678
+ contextWithTimeout , cancel := context .WithTimeout (engine .ctx , time .Minute )
1679
+ defer cancel ()
1680
+ err := retry .RetryWithBackoffCtx (contextWithTimeout , getIPBridgeBackoff , func () error {
1681
+ gotIPBridge := false
1682
+ if task .IsServiceConnectEnabled () {
1683
+ targetContainer , err := task .GetBridgeModePauseContainerForTaskContainer (container )
1684
+ if err != nil {
1685
+ return err
1694
1686
}
1695
- return errors .New ("Bridge IP not available to use for firelens" )
1696
- })
1697
- if err != nil {
1698
- return dockerapi.DockerContainerMetadata {
1699
- Error : dockerapi.CannotStartContainerError {FromError : err },
1687
+ _ , gotIPBridge = getContainerHostIP (targetContainer .GetNetworkSettings ())
1688
+ if gotIPBridge {
1689
+ return nil
1690
+ }
1691
+ } else {
1692
+ inspectOutput , err := engine .client .InspectContainer (engine .ctx , dockerContainerMD .DockerID ,
1693
+ dockerclient .InspectContainerTimeout )
1694
+ if err != nil {
1695
+ return err
1700
1696
}
1697
+ _ , gotIPBridge = getContainerHostIP (inspectOutput .NetworkSettings )
1698
+ if gotIPBridge {
1699
+ dockerContainerMD .NetworkSettings = inspectOutput .NetworkSettings
1700
+ return nil
1701
+ }
1702
+ }
1703
+ return errors .New ("Bridge IP not available to use for firelens" )
1704
+ })
1705
+ if err != nil {
1706
+ logger .Error ("Failed to start Firelens container" , logger.Fields {
1707
+ field .TaskID : task .GetID (),
1708
+ field .Container : container .Name ,
1709
+ field .Error : err ,
1710
+ })
1711
+ return dockerapi.DockerContainerMetadata {
1712
+ Error : dockerapi.CannotStartContainerError {FromError : err },
1701
1713
}
1702
1714
}
1703
-
1704
1715
}
1705
1716
}
1706
1717
if execcmd .IsExecEnabledContainer (container ) {
0 commit comments