Docker 1.8.2-10.el7.centos 已安装并能够在 CentOS7 上运行。
为了升级docker这个帖子已读取并发出以下命令:
curl -L https://get.docker.com/builds/Linux/x86_64/docker-latest > /usr/bin/docker; chmod +x /usr/bin/docker
curl -L https://raw.githubusercontent.com/docker/docker/master/contrib/init/systemd/docker.service > /usr/lib/systemd/system/docker.service
curl -L https://raw.githubusercontent.com/docker/docker/master/contrib/init/systemd/docker.socket > /usr/lib/systemd/system/docker.socket
问题
当docker启动时:
systemctl start docker
它似乎挂了并且 /var/log/messages 表明:
Feb 11 00:22:01 localhost systemd: Device dev-disk-by\x2duuid-f00f4f0a\x2dba57\x2d468b\x2dba82\x2d72f1bb087bbb.device appeared twice with different sysfs paths /sys/devices/virtual/block/loop0 and /sys/devices/virtual/block/dm-6
Feb 11 00:22:05 localhost docker: time="2016-02-11T00:22:05.977110830+01:00" level=info msg="calculated checksum for layer 26de6fe292b2275378ce421742105813ee98fb49a5e0e45c1fd89e20eedc2c31: sha256:0c42efc496d9944258fb38ccfa64f53c32433a24daa3ad64144e48c5deb1c78c"
Feb 11 00:22:06 localhost kernel: EXT4-fs (dm-8): mounted filesystem with ordered data mode. Opts: (null)
Feb 11 00:22:06 localhost systemd-udevd: conflicting device node '/dev/mapper/docker-253:0-68595821-51009a2811797c49222fd5f9cb9e38fbe4fca9cf2a7fcfb1151d34c0b545a42a' found, link to '/dev/dm-8' will not be created
Feb 11 00:22:06 localhost systemd: Device dev-disk-by\x2duuid-f00f4f0a\x2dba57\x2d468b\x2dba82\x2d72f1bb087bbb.device appeared twice with different sysfs paths /sys/devices/virtual/block/loop0 and /sys/devices/virtual/block/dm-8
讨论
奇怪的是二进制文件已经升级:
[root@localhost]# docker -v Docker 版本 1.10.0,内部版本 590d5108
但服务无法启动。
- 虽然1.10.0在CentOS7上无法启动,但是docker 1.9.0却可以启动:
curl -L https://get.docker.com/builds/Linux/x86_64/docker-1.9.0 > /usr/bin/docker; chmod +x /usr/bin/docker
问题
如何在 CentOS7 上将 Docker 升级到 1.10.0?
答案1
docker 的默认存储驱动程序可能已改变。
我遇到了同样的问题,今天终于成功启动了docker 1.10。我的问题是docker的启动命令。看来我使用了带devicemapper
存储驱动程序的docker,而docker 1.10驱动程序不一样。
这是我尝试过的。
1.删除网络文件。
当我放弃升级 docker 1.10 并将其从 1.10 降级到 1.9 时,1.9 无法启动。在我删除这些文件后,它启动了。这可能不会影响您的问题,但我决定从现在开始在升级 docker 之前删除它们。
mkdir /var-lib-docker-network-files
mv /var/lib/docker/network/files/* /var-lib-docker-network-files
2. 将其覆盖ExecStart
为您的自定义命令。
您可以在这里看到默认的启动命令;
vi /lib/systemd/system/docker.service
我的和官方存储库完全相同。
ttps://github.com/docker/docker/blob/master/contrib/init/systemd/docker.service
应该是这样的;
ExecStart=/usr/bin/docker daemon -H fd://
这个命令对我不起作用。所以我创建了一个文件,它覆盖了该命令,作为此处的包装配置文件;
vi /etc/systemd/system/docker.service.d/docker.conf
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -s devicemapper -H fd://
3. 重新加载并启动
确保在启动 docker 之前重新加载 systemd。
systemctl daemon-reload
service docker start
仅供参考,此命令将删除所有 docker 镜像。
我在这里。
vi /etc/systemd/system/docker.service.d/docker.conf
[Service]
ExecStart=
ExecStart=docker daemon -D -s overlay
虽然这个命令成功了,docker 1.10 也启动了,但我的所有 docker 镜像都消失了。我很恼火,因为docker images
什么都没有返回。但我里面还有很多真正的镜像文件,/var/lib/docker/devicemapper/
所以我认为这个命令引用了一个奇怪的目录。然后我得到了答案,它是devicemapper
。
官方文件
您可以查看详细信息这里。我们可能要了解一下守护进程。
答案2
docker 1.10 迁移需要太多时间
如果您重新启动后可以等待一天,您的 docker 1.10 将会启动。
首次启动 Docker Engine 1.10 时,所有当前图像、标签和容器都会自动迁移到新基础。在加载容器之前,守护进程将计算当前数据所需的所有校验和,完成后,所有图像和标签都将具有全新的安全 ID。
虽然这是一个简单的操作,但如果您有大量的图像数据,则计算文件的 SHA256 校验和可能需要一些时间。平均而言,您应该假设迁移器可以以 100MB/s 的速度处理数据。在此期间,您的 Docker 守护程序将无法响应请求。
请参见这里。