Upgrading Docker on Amazon Linux AMI
If you're using the EC2 Container service, the AWS ECS-optimized AMI (2015.09.b) is running docker-1.7.1 as of this writing. A post in the AWS forums states "[AWS is] testing 1.9 RC and plan to deliver it this month."
To expand on Hzmy's answer, here's how to upgrade Docker to 1.9.0 in an SSH session:
service docker stopcp /usr/bin/docker /usr/bin/docker.oldcurl -o /usr/bin/docker https://get.docker.com/builds/Linux/x86_64/docker-1.9.0service docker start
If you're using CloudFormation templates, here's a command you can drop in your AWS::Cloudformation::Init:
..."commands": { ..., "03_upgrade_docker_for_log_driver_support": { "command": { "Fn::Join": [ "", [ "#!/bin/bash -xe\n", "service docker stop\n", "cp /usr/bin/docker /usr/bin/docker.old\n", "curl -o /usr/bin/docker https://get.docker.com/builds/Linux/x86_64/docker-1.8.3\n", "service docker start\n" ] ] } } ...}...
Maybe not the cleanest, but it seems to work for me.
I ended up installing the Amazon Linux docker
package and then overwriting the /usr/bin/docker
binary with the 1.8.2 version binary from: https://docs.docker.com/installation/binaries/.
Not exactly elegant - but all of the dependencies are the same, and seeing as my AMI is immutable the package won't be upgraded on top of the current image.
I just put this answer here for more people to find it, but all the credits to Archimedes Trajano.
The only thing I corrected is that haveged
installation is not necessary on the latest Amazon Linux 2 LTS Candidate. Also, since SELinux is disabled by default on Amazon Linux, so all the steps realated to SELinux are not necessary too, but container-selinux
is required by docker-ce
, so it must be installed anyway. Firewall enabling is optional here.
So, final steps for latest Amazon 2 AMI could look like this:
yum install -q -y http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.99-1.el7.noarch.rpmyum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repoyum install -q -y firewalld docker-cesystemctl enable firewalldsystemctl start firewalldfirewall-cmd --add-port=2377/tcp --permanentfirewall-cmd --add-port=2376/tcp --permanentfirewall-cmd --add-port=7946/tcp --permanentfirewall-cmd --add-port=7946/udp --permanentfirewall-cmd --add-port=4789/udp --permanentfirewall-cmd --zone=public --permanent --add-masqueradefirewall-cmd --reloadusermod -a -G docker ec2-usersystemctl enable dockersystemctl start docker
All the steps should be ran with sudo
. Non-sudo docker run will be available after reboot/relogin upon execution of these commands.