在Amazon Linux AMI上升级Docker

8

我希望在亚马逊Linux上将Docker升级到v1.8。

目前他们内部的yum软件包仓库中有:Docker version 1.7.1, build 786b29d/1.7.1

我已经尝试过的事情

Docker项目的存储库手动安装

错误:软件包:docker-engine-1.8.2-1.el7.centos.x86_64(dockerrepo) 要求:systemd-units


你可能会感到有些不幸。Amazon Linux是从CentOS 5分支出来的,而且在过去几年中发生了很大变化。一些Centos7的软件包可能不兼容。因此,你可以尝试不同的Linux发行版(如Centos7、Ubuntu、Fedora),或者等待Amazon更新它的AMI。 - Vor
我现在尝试从源代码安装Docker。如果失败了,我将打开亚马逊的docker yum软件包并进行调整。 - Hzmy
4个回答

4
如果您正在使用EC2容器服务,截至本文撰写时,AWS ECS优化AMI(2015.09.b)正在运行docker-1.7.1。 AWS论坛中的一篇帖子表示:“[AWS]正在测试1.9 RC,并计划在本月发布。”
为了扩展Hzmy的答案,以下是在SSH会话中将Docker升级到1.9.0的方法:
service docker stop
cp /usr/bin/docker /usr/bin/docker.old
curl -o /usr/bin/docker https://get.docker.com/builds/Linux/x86_64/docker-1.9.0
service docker start

如果您正在使用云形成模板,这是一个命令,您可以将其放在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"
                ]
            ]
        }
    }
    ...
}
...

也许不是最干净的,但对我来说似乎很有效。

没错!只要 Docker 的 init 脚本不出什么问题,一切都应该没问题! - Hzmy

3
我最终安装了Amazon Linux的docker软件包,然后用来自https://docs.docker.com/installation/binaries/的1.8.2版本二进制文件覆盖了/usr/bin/docker二进制文件。虽然不是很优雅,但所有依赖项都是相同的,而且由于我的AMI是不可变的,因此该软件包不会在当前镜像上进行升级。

1
我只是在这里放置此答案,以便更多人能够找到它,但所有的功劳都归功于Archimedes Trajano
我唯一纠正的是,在最新的Amazon Linux 2 LTS候选版上不需要安装haveged。另外,由于Amazon Linux默认禁用SELinux,所以与SELinux相关的所有步骤也都不必要,但docker-ce需要container-selinux,因此必须无论如何安装。启用防火墙在这里是可选的。
因此,最新的Amazon 2 AMI的最终步骤可能如下所示:
yum install -q -y http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.99-1.el7.noarch.rpm
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -q -y firewalld docker-ce
systemctl enable firewalld
systemctl start firewalld
firewall-cmd --add-port=2377/tcp --permanent
firewall-cmd --add-port=2376/tcp --permanent
firewall-cmd --add-port=7946/tcp --permanent
firewall-cmd --add-port=7946/udp --permanent
firewall-cmd --add-port=4789/udp --permanent
firewall-cmd --zone=public --permanent --add-masquerade
firewall-cmd --reload
usermod -a -G docker ec2-user
systemctl enable docker
systemctl start docker

所有步骤都应该使用 sudo 运行。在执行这些命令后,非 sudo 的 docker run 将在重新启动/重新登录后可用。


1

将 Docker 更新到最新版本对我有用

sudo yum upgrade docker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接