AWS ECS Cannotpullcontainererror occurs when a task fails to pull an image due to an incorrectly configured network or an intermittent connection.
Here, at Bobcares, we assist our customers with several AWS queries as part of our AWS Support Services.
Today, let us see how to fix this error.
AWS ECS Cannotpullcontainererror
Recently, we had a query regarding a task launch in Amazon ECS. It shows an error stating:
“CannotPullContainerError: Error response from daemon:Get https://registry-name/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).”
Now, let us see the steps our Support Techs employ to resolve the error due to an incorrectly configured network.
There are two options from which we can select a solution based on the launch type.
Amazon EC2 launch type
In case the container instance is in a private subnet, we need to make sure that the subnet has a NAT gateway in the route table.
We can also use AWS PrivateLink or HTTP proxy instead of the NAT gateway.
If we fail to correctly configure the AWS PrivateLink or HTTP proxy, it will fail with errors.
On the other hand, if the instance is in a public subnet, we make sure that the instance has a public IP address.
To assign public IPs to container instances on launch we can edit the subnet’s public IPv4 address behavior.
Similarly, if we use an Amazon-provided DNS in the Amazon VPC, the security group attached to the instance must have outbound access allowed for HTTPS (port 443).
Finally, in the case of a custom DNS, we need to allow outbound access for DNS (UDP and TCP) on port 53 and HTTPS on port 443.
We need to also verify that the network ACL rules aren’t blocking traffic to the registry.
Fargate launch type
We need to confirm that the subnet we use to run a task has a route to an internet gateway or NAT gateway in a route table.
We can also use AWS PrivateLink instead of an internet gateway or NAT gateway.
To avoid errors, we need to correctly configure AWS PrivateLink or HTTP proxy.
In case we launch tasks in a public subnet, we select ENABLED for Auto-assign public IP when we launch a task in the Amazon EC2 console.
This allows the task to have outbound network access to pull an image.
On the other hand, if we have Amazon-provided DNS, we confirm that the security group attached has outbound access allowed for HTTPS (port 443).
Likewise, for a custom DNS, we make sure that it allows outbound access for DNS (UDP and TCP) on port 53 and HTTPS access on port 443.
In addition, we need to verify that the network ACL rules aren’t blocking traffic to the registry.
[Need help with the above? We are here to assist you]
In short, we saw how our Support Techs fix the AWS ECS error for our customers.