- You can only bind 1 port and 1 ELB to a service. This means, for example, if you have nginx listening on port 80 and 443 you need to manually configure the ELB and can't take advantage of automatically generated port numbers on the host (So you basically can only have 1 HTTP(s) server on a host)
- There is no way to cleanly decommission a host from a cluster. Say if you want to reboot or replace a server in the cluster you can't tell ECS to drain connections from the ELB and move the containers off the host
- Unable to specify rules for which hosts services should run on. For example you can't say that the service needs to make sure it has instances in X AZs or don't run multiple instances of the same service on the same host.
- No easy way to implement any kind of service discovery, you have to roll this yourself or set up loads of internal ELBs as a sort of service discovery.
- Worst of all the ecs-agent is very buggy. It has releases where it just keeps crashing [1] and leaving untracked running containers just hanging around to an issue where they released a new version with a newer docker library that changed how it handled certain parameters causing our entire cluster to fail until they hot fixed it with a change to how their API sent data to the client.
We're currently looking at alternatives for our docker infrastructure.