我尝试将 VirtualBox 虚拟机移动到 Docker 映像。我们使用 VirtualBox 交叉编译 armhf 设备的源代码(基于 BeagleBone 的东西)
我遇到了问题RUN apt-get install -y build-essential:armhf
完整的 Docker 代码如下所示:
FROM debian:jessie
RUN apt-get update
RUN apt-get upgrade
RUN apt-get install -y build-essential module-assistant curl git cmake
RUN curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | apt-key add -
RUN echo "deb http://emdebian.org/tools/debian jessie main" > /etc/apt/sources.list.d/crosstools.list
RUN dpkg --add-architecture armhf
RUN apt-get update
RUN apt-get install -y crossbuild-essential-armhf
RUN apt-get install -y curl:armhf
RUN apt-get install -y libcurl4-openssl-dev:armhf openssl:armhf
RUN apt-get install -y build-essential:armhf
RUN apt-get install -y libssl-dev:armhf
运行 docker build 时出现以下错误:
Step 12/13 : RUN apt-get install -y build-essential:armhf
---> Running in ca5a82d30cc7
Reading package lists...
Building dependency tree...
Reading state information...
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
build-essential:armhf : Depends: gcc:armhf (>= 4:4.9.1) but it is not going to be installed
Depends: g++:armhf (>= 4:4.9.1) but it is not going to be installed
Depends: make:armhf
E: Unable to correct problems, you have held broken packages.
The command '/bin/sh -c apt-get install -y build-essential:armhf' returned a non-zero code: 100
如果我查看虚拟机上的 bash 历史记录,它看起来是一样的。我的 Docker 代码有什么问题?
编辑:使用 -o Debug::pkgProblemResolver=yes 输出:
Starting pkgProblemResolver with broken count: 2
Starting 2 pkgProblemResolver with broken count: 2
Investigating (0) dpkg-dev [ amd64 ] < 1.17.27 > ( utils )
Broken dpkg-dev:amd64 Depends on make [ amd64 ] < 4.0-8.1 > ( devel )
Considering make:amd64 1 as a solution to dpkg-dev:amd64 2
Added make:amd64 to the remove list
Broken dpkg-dev:amd64 Depends on binutils [ amd64 ] < 2.25-5+deb8u1 > ( devel )
Considering binutils:amd64 1 as a solution to dpkg-dev:amd64 2
Added binutils:amd64 to the remove list
Fixing dpkg-dev:amd64 via keep of make:amd64
Fixing dpkg-dev:amd64 via keep of binutils:amd64
Investigating (0) binutils [ armhf ] < none -> 2.25-5+deb8u1 > ( devel )
Broken binutils:armhf Conflicts on binutils [ amd64 ] < 2.25-5+deb8u1 > ( devel )
Considering binutils:amd64 1 as a solution to binutils:armhf 2
Added binutils:amd64 to the remove list
Fixing binutils:armhf via remove of binutils:amd64
Investigating (0) make [ amd64 ] < 4.0-8.1 > ( devel )
Broken make:amd64 Conflicts on make [ armhf ] < none -> 4.0-8.1 > ( devel )
Considering make:armhf 0 as a solution to make:amd64 1
Added make:armhf to the remove list
Fixing make:amd64 via keep of make:armhf
Investigating (0) binutils-arm-linux-gnueabihf [ amd64 ] < 2.25-5 > ( devel )
Broken binutils-arm-linux-gnueabihf:amd64 Depends on binutils [ amd64 ] < 2.25-5+deb8u1 > ( devel )
Considering binutils:amd64 1 as a solution to binutils-arm-linux-gnueabihf:amd64 1
Removing binutils-arm-linux-gnueabihf:amd64 rather than change binutils:amd64
Investigating (1) build-essential [ armhf ] < none -> 11.7 > ( devel )
Broken build-essential:armhf Depends on make [ armhf ] < none -> 4.0-8.1 > ( devel )
Considering make:armhf 0 as a solution to build-essential:armhf 9999
Re-Instated make:armhf
Investigating (1) dpkg-dev [ amd64 ] < 1.17.27 > ( utils )
Broken dpkg-dev:amd64 Depends on binutils [ amd64 ] < 2.25-5+deb8u1 > ( devel )
Considering binutils:amd64 1 as a solution to dpkg-dev:amd64 2
Added binutils:amd64 to the remove list
Fixing dpkg-dev:amd64 via keep of binutils:amd64
Investigating (1) gcc-4.9-arm-linux-gnueabihf [ amd64 ] < 4.9.2-10 > ( devel )
Broken gcc-4.9-arm-linux-gnueabihf:amd64 Depends on binutils-arm-linux-gnueabihf [ amd64 ] < 2.25-5 > ( devel ) (>= 2.25)
Considering binutils-arm-linux-gnueabihf:amd64 1 as a solution to gcc-4.9-arm-linux-gnueabihf:amd64 2
Added binutils-arm-linux-gnueabihf:amd64 to the remove list
Fixing gcc-4.9-arm-linux-gnueabihf:amd64 via keep of binutils-arm-linux-gnueabihf:amd64
Investigating (1) binutils [ armhf ] < none -> 2.25-5+deb8u1 > ( devel )
Broken binutils:armhf Conflicts on binutils [ amd64 ] < 2.25-5+deb8u1 > ( devel )
Considering binutils:amd64 1 as a solution to binutils:armhf 2
Added binutils:amd64 to the remove list
Fixing binutils:armhf via remove of binutils:amd64
Investigating (1) make [ amd64 ] < 4.0-8.1 > ( devel )
Broken make:amd64 Conflicts on make [ armhf ] < none -> 4.0-8.1 > ( devel )
Considering make:armhf 0 as a solution to make:amd64 1
Added make:armhf to the remove list
Fixing make:amd64 via keep of make:armhf
Investigating (1) binutils-arm-linux-gnueabihf [ amd64 ] < 2.25-5 > ( devel )
Broken binutils-arm-linux-gnueabihf:amd64 Depends on binutils [ amd64 ] < 2.25-5+deb8u1 > ( devel )
Considering binutils:amd64 1 as a solution to binutils-arm-linux-gnueabihf:amd64 1
Removing binutils-arm-linux-gnueabihf:amd64 rather than change binutils:amd64
Investigating (2) build-essential [ armhf ] < none -> 11.7 > ( devel )
Broken build-essential:armhf Depends on make [ armhf ] < none -> 4.0-8.1 > ( devel )
Considering make:armhf 0 as a solution to build-essential:armhf 9999
Considering make-guile:armhf -1 as a solution to build-essential:armhf 9999
Re-Instated libgc1c2:armhf
Re-Instated libltdl7:armhf
Re-Instated libtinfo5:armhf
Re-Instated libncurses5:armhf
Re-Instated libreadline6:armhf
Re-Instated libunistring0:armhf
Re-Instated guile-2.0-libs:armhf
Re-Instated make-guile:armhf
Investigating (2) dpkg-dev [ amd64 ] < 1.17.27 > ( utils )
Broken dpkg-dev:amd64 Depends on binutils [ amd64 ] < 2.25-5+deb8u1 > ( devel )
Considering binutils:amd64 1 as a solution to dpkg-dev:amd64 2
Added binutils:amd64 to the remove list
Fixing dpkg-dev:amd64 via keep of binutils:amd64
Investigating (2) gcc-4.9-arm-linux-gnueabihf [ amd64 ] < 4.9.2-10 > ( devel )
Broken gcc-4.9-arm-linux-gnueabihf:amd64 Depends on binutils-arm-linux-gnueabihf [ amd64 ] < 2.25-5 > ( devel ) (>= 2.25)
Considering binutils-arm-linux-gnueabihf:amd64 1 as a solution to gcc-4.9-arm-linux-gnueabihf:amd64 2
Added binutils-arm-linux-gnueabihf:amd64 to the remove list
Fixing gcc-4.9-arm-linux-gnueabihf:amd64 via keep of binutils-arm-linux-gnueabihf:amd64
Investigating (2) binutils [ armhf ] < none -> 2.25-5+deb8u1 > ( devel )
Broken binutils:armhf Conflicts on binutils [ amd64 ] < 2.25-5+deb8u1 > ( devel )
Considering binutils:amd64 2 as a solution to binutils:armhf 2
Holding Back binutils:armhf rather than change binutils:amd64
Investigating (2) make [ amd64 ] < 4.0-8.1 > ( devel )
Broken make:amd64 Conflicts on make-guile [ armhf ] < none -> 4.0-8.1 > ( devel )
Considering make-guile:armhf -1 as a solution to make:amd64 1
Added make-guile:armhf to the remove list
Fixing make:amd64 via keep of make-guile:armhf
Investigating (3) build-essential [ armhf ] < none -> 11.7 > ( devel )
Broken build-essential:armhf Depends on make [ armhf ] < none -> 4.0-8.1 > ( devel )
Considering make:armhf 0 as a solution to build-essential:armhf 9999
Considering make-guile:armhf 1 as a solution to build-essential:armhf 9999
Investigating (3) gcc-4.9 [ armhf ] < none -> 4.9.2-10 > ( devel )
Broken gcc-4.9:armhf Depends on binutils [ armhf ] < none -> 2.25-5+deb8u1 > ( devel ) (>= 2.25)
Considering binutils:armhf 2 as a solution to gcc-4.9:armhf 3
Holding Back gcc-4.9:armhf rather than change binutils:armhf
Investigating (3) gcc [ armhf ] < none -> 4:4.9.2-2 > ( devel )
Broken gcc:armhf Depends on gcc-4.9 [ armhf ] < none -> 4.9.2-10 > ( devel ) (>= 4.9.2-1~)
Considering gcc-4.9:armhf 3 as a solution to gcc:armhf 1
Holding Back gcc:armhf rather than change gcc-4.9:armhf
Investigating (3) g++ [ armhf ] < none -> 4:4.9.2-2 > ( devel )
Broken g++:armhf Depends on gcc [ armhf ] < none -> 4:4.9.2-2 > ( devel ) (>= 4:4.9.2-2)
Considering gcc:armhf 1 as a solution to g++:armhf 0
Holding Back g++:armhf rather than change gcc:armhf
Investigating (3) g++-4.9 [ armhf ] < none -> 4.9.2-10 > ( devel )
Broken g++-4.9:armhf Depends on gcc-4.9 [ armhf ] < none -> 4.9.2-10 > ( devel ) (= 4.9.2-10)
Considering gcc-4.9:armhf 3 as a solution to g++-4.9:armhf 0
Holding Back g++-4.9:armhf rather than change gcc-4.9:armhf
Investigating (4) build-essential [ armhf ] < none -> 11.7 > ( devel )
Broken build-essential:armhf Depends on gcc [ armhf ] < none -> 4:4.9.2-2 > ( devel ) (>= 4:4.9.1)
Considering gcc:armhf 1 as a solution to build-essential:armhf 9999
Re-Instated binutils:armhf
Re-Instated gcc-4.9:armhf
Re-Instated gcc:armhf
Broken build-essential:armhf Depends on g++ [ armhf ] < none -> 4:4.9.2-2 > ( devel ) (>= 4:4.9.1)
Considering g++:armhf 0 as a solution to build-essential:armhf 9999
Re-Instated g++-4.9:armhf
Re-Instated g++:armhf
Broken build-essential:armhf Depends on make [ armhf ] < none -> 4.0-8.1 > ( devel )
Considering make:armhf 0 as a solution to build-essential:armhf 9999
Considering make-guile:armhf 1 as a solution to build-essential:armhf 9999
Investigating (4) binutils [ armhf ] < none -> 2.25-5+deb8u1 > ( devel )
Broken binutils:armhf Conflicts on binutils [ amd64 ] < 2.25-5+deb8u1 > ( devel )
Considering binutils:amd64 2 as a solution to binutils:armhf 2
Holding Back binutils:armhf rather than change binutils:amd64
Investigating (5) build-essential [ armhf ] < none -> 11.7 > ( devel )
Broken build-essential:armhf Depends on make [ armhf ] < none -> 4.0-8.1 > ( devel )
Considering make:armhf 0 as a solution to build-essential:armhf 9999
Considering make-guile:armhf 1 as a solution to build-essential:armhf 9999
Investigating (5) gcc-4.9 [ armhf ] < none -> 4.9.2-10 > ( devel )
Broken gcc-4.9:armhf Depends on binutils [ armhf ] < none -> 2.25-5+deb8u1 > ( devel ) (>= 2.25)
Considering binutils:armhf 2 as a solution to gcc-4.9:armhf 3
Holding Back gcc-4.9:armhf rather than change binutils:armhf
Investigating (5) gcc [ armhf ] < none -> 4:4.9.2-2 > ( devel )
Broken gcc:armhf Depends on gcc-4.9 [ armhf ] < none -> 4.9.2-10 > ( devel ) (>= 4.9.2-1~)
Considering gcc-4.9:armhf 3 as a solution to gcc:armhf 1
Holding Back gcc:armhf rather than change gcc-4.9:armhf
Investigating (5) g++ [ armhf ] < none -> 4:4.9.2-2 > ( devel )
Broken g++:armhf Depends on gcc [ armhf ] < none -> 4:4.9.2-2 > ( devel ) (>= 4:4.9.2-2)
Considering gcc:armhf 1 as a solution to g++:armhf 0
Holding Back g++:armhf rather than change gcc:armhf
Investigating (5) g++-4.9 [ armhf ] < none -> 4.9.2-10 > ( devel )
Broken g++-4.9:armhf Depends on gcc-4.9 [ armhf ] < none -> 4.9.2-10 > ( devel ) (= 4.9.2-10)
Considering gcc-4.9:armhf 3 as a solution to g++-4.9:armhf 0
Holding Back g++-4.9:armhf rather than change gcc-4.9:armhf
Investigating (6) build-essential [ armhf ] < none -> 11.7 > ( devel )
Broken build-essential:armhf Depends on gcc [ armhf ] < none -> 4:4.9.2-2 > ( devel ) (>= 4:4.9.1)
Considering gcc:armhf 1 as a solution to build-essential:armhf 9999
Broken build-essential:armhf Depends on g++ [ armhf ] < none -> 4:4.9.2-2 > ( devel ) (>= 4:4.9.1)
Considering g++:armhf 0 as a solution to build-essential:armhf 9999
Broken build-essential:armhf Depends on make [ armhf ] < none -> 4.0-8.1 > ( devel )
Considering make:armhf 0 as a solution to build-essential:armhf 9999
Considering make-guile:armhf 1 as a solution to build-essential:armhf 9999
Done
答案1
这是导致问题的行:
RUN apt-get install -y build-essential:armhf
您不需要build-essential:armhf
交叉编译。你应该删除它;docker build
然后应该能够毫无问题地构建容器。
答案2
看起来有些依赖项无法安装。具体是什么很难说。
不幸的是,apt
当遇到无法修复的问题时, 的输出并不是很有帮助。不过,您可以诱使它提供更多输出——通过-o Debug::pkgProblemResolver=yes
在 apt 命令行上指定。这应该会为您提供有关它正在尝试做什么的更多详细信息,并希望允许您修复它。
如果这不能解决您的问题,请使用该选项运行 apt 并发布输出。