在使用apt-get -y upgrade
(Xenial)映像的新Ubuntu 14.04计算机上执行ubuntu:latest
时,它引发了错误:
Setting up makedev (2.3.1-93ubuntu2~ubuntu16.04.1) ...
mv: cannot move 'console-' to 'console': Device or resource busy
makedev console c 5 1 root tty 0600: failed
我使用以下命令在新的Ubuntu 14.04上全新安装了docker:
sudo apt-get remove docker docker-engine
sudo apt-get update
sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
wget -qO- https://get.docker.com/ | sudo sh
su - $USER # To logout and login
hello-world
的Docker运行良好:
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
78445dd45222: Pull complete
Digest: sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://cloud.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/
当我用:
创建一个空的docker容器时docker run -it ubuntu bash
并运行以下内容:
apt-get update
apt-get install -y debconf-utils
echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
apt-get update
apt-get -y upgrade
错误:
Setting up makedev (2.3.1-93ubuntu2~ubuntu16.04.1) ...
mv: cannot move 'console-' to 'console': Device or resource busy
makedev console c 5 1 root tty 0600: failed
在执行最后apt-get -y upgrade
时会引发
已启用完整泊坞窗日志:https://gist.github.com/alvations/ebe7175b984213d6f64a3c779ba3249e
答案 0 :(得分:4)
同意其他答案/评论,apt-get -y upgrade
并不像拉动更新/更新的图片那样好。如果需要特定包但图像中已过期,则安装该特定包通常就足够了(因为依赖关系将根据需要进行更新)。
然而,确实没有理由不能使用apt-get -y upgrade
,事实上,我认为这是一个错误,类似但不完全相同:
https://bugs.launchpad.net/ubuntu/+source/makedev/+bug/1675163
失败的部分是在postinst脚本中第一次调用MAKEDEV,但这会被处理并继续执行脚本。最终,这意味着安装makedev目前没有问题。 但这可能并非总是如此因此可能需要使用Ubuntu引发错误以检测到docker容器(不知何故)。
注意:如果你关心makedev当前破坏你的docker / dev /目录,或者想要确保你摆脱安装makedev的任何错误条件,那我修复的bug就可以解决了用于欺骗postinstall脚本不运行。脚本中的检查说:
# don't stomp on LXC users
if grep -q container=lxc /proc/1/environ
then
echo "LXC container detected, aborting due to LXC managed /dev."
exit 0
fi
所以,如果你要添加一个环境变量,其名称以容量为lxc的容器结尾,那么检查将被触发,并且不会安装任何新设备
docker run -ti -e "ImNotAnLXCcontainer=lxc" ubuntu
这将导致脚本退出,而不是创建一大堆/ dev / entries,并输出消息:
Setting up makedev (2.3.1-93ubuntu2~ubuntu16.04.1) ...
LXC container detected, aborting due to LXC managed /dev.
答案 1 :(得分:3)
Docker容器不是完整的VM。它们与主机共享内核,因此一些低级操作(例如制作设备)将会失败并不奇怪。但是,我注意到尽管出现错误消息,命令仍未失败 - 命令返回0.我建议容器实际按预期工作。
尽管如此,最好的答案是不要运行apt-get upgrade
。您使用的是ubuntu:latest
图片,Docker会使用新版本保持最新版本。因此,只需执行apt-get upgrade
而不是docker pull ubuntu:latest
来获取新版本。
您可以查看latest
图片上次更新的时间https://github.com/docker-library/repo-info/blob/master/repos/ubuntu/remote/latest.md。在撰写本文时,最后一次更新是在6周前,因此它将缺少一些更新。虽然我对它不是最新的感到失望,但我仍然建议不要运行upgrade
,因为您可能会遇到问题并且正在将更新的责任转移到自己身上。如果缺少重要更新,请打开问题。
我注意到debian
图像似乎保持更新,可能是因为它被用作许多官方图像的基本图像 - 如果可能,我建议使用它。 / p>