在使用ubuntu:latest(Xenial)映像在新的Ubuntu 14.04计算机上进行apt-get -y升级时,它引发了一个错误:
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升级时引发
完整的泊坞窗日志已打开:https://gist.github.com/alvations/ebe7175b984213d6f64a3c779ba3249e
最佳答案
同意其他答案/评论,apt-get -y升级并不像拉动更新/更新的图像那样好.如果需要特定包但图像中已过期,则安装该特定包通常就足够了(因为依赖关系将根据需要进行更新).
但是,你真的没有理由不能使用apt-get -y升级,事实上,我认为这是一个bug,类似但不完全相同:
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.