简体   繁体   English

在 Docker 容器中安装 python 时执行格式错误

[英]Exec format error while python installation in Docker container

I'm trying to install cython:arm64 , this is my Dockerfile:我正在尝试安装cython:arm64 ,这是我的 Dockerfile:

FROM ubuntu:18.04
RUN apt-get update && \
apt-get -y upgrade && \
echo deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ bionic main restricted > /etc/apt/sources.list && \
echo deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ bionic-updates main restricted >> /etc/apt/sources.list && \
echo deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ bionic universe >> /etc/apt/sources.list && \
echo deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ bionic-updates universe >> /etc/apt/sources.list && \
echo deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ bionic multiverse >> /etc/apt/sources.list && \
echo deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ bionic-updates multiverse >> /etc/apt/sources.list && \
echo deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse >> /etc/apt/sources.list && \
echo deb [arch=amd64] http://security.ubuntu.com/ubuntu/ bionic-security main restricted >> /etc/apt/sources.list && \
echo deb [arch=amd64] http://security.ubuntu.com/ubuntu/ bionic-security universe >> /etc/apt/sources.list && \
echo deb [arch=amd64] http://security.ubuntu.com/ubuntu/ bionic-security multiverse >> /etc/apt/sources.list && \
echo deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ bionic main >> /etc/apt/sources.list && \
echo deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ bionic universe >> /etc/apt/sources.list && \
echo deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ bionic-updates main >> /etc/apt/sources.list && \
echo deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ bionic-security main >> /etc/apt/sources.list

RUN dpkg --add-architecture arm64 && \
    apt-get update && \
    apt-get install -y -f \
    cython:arm64

cython:arm64 has a dependency on python2.7-minimal:arm64 , so this packet is being installed as well and there is exec format error while python installation: cython:arm64依赖于python2.7-minimal:arm64 ,所以这个包也被安装了,python 安装时出现 exec 格式错误:

Setting up python2.7-minimal:arm64 (2.7.17-1~18.04ubuntu1.6) ...
/var/lib/dpkg/info/python2.7-minimal.postinst: 42: /var/lib/dpkg/info/python2.7-minimal.postinst: /usr/bin/python2.7: Exec format error
dpkg: error processing package python2.7-minimal:arm64 (--configure):
 installed python2.7-minimal:arm64 package post-installation script subprocess returned error exit status 2

How to avoid this issue and install cython:arm64 ?如何避免此问题并安装cython:arm64

To support this, you need to install qemu packages on host machine before build your docker image:为了支持这一点,你需要在构建你的 docker 镜像之前在主机上安装 qemu 包:

sudo apt-get install qemu binfmt-support qemu-user-static

Then, use next to register the binfmt:然后,使用 next 注册 binfmt:

docker run --rm --privileged multiarch/qemu-user-static --reset -p yes

Execution:执行:

$ docker build -t abc:2 .
Step 1/3 : FROM ubuntu:18.04
......
Step 2/3 : RUN apt-get update && apt-get -y upgrade && echo deb [arch=amd64] 
......
Step 3/3 : RUN dpkg --add-architecture arm64 &&     apt-get update &&     apt-get install -y -f     cython:arm64
...
Setting up libsqlite3-0:arm64 (3.22.0-1ubuntu0.4) ...
Setting up libstdc++6:arm64 (8.4.0-1ubuntu1~18.04) ...
Setting up libffi6:arm64 (3.2.1-8) ...
Setting up libc-dev-bin (2.27-3ubuntu1.4) ...
Setting up manpages-dev (4.15-1) ...
Setting up libc6-dev:arm64 (2.27-3ubuntu1.4) ...
Setting up libitm1:arm64 (8.4.0-1ubuntu1~18.04) ...
Setting up libpython2.7-stdlib:arm64 (2.7.17-1~18.04ubuntu1.6) ...
Setting up libisl19:arm64 (0.19-1) ...
Setting up libcc1-0:arm64 (8.4.0-1ubuntu1~18.04) ...
Setting up libasan4:arm64 (7.5.0-3ubuntu1~18.04) ...
Setting up libbinutils:arm64 (2.30-21ubuntu1~18.04.5) ...
Setting up libubsan0:arm64 (7.5.0-3ubuntu1~18.04) ...
Setting up libmpfr6:arm64 (4.0.1-1) ...
Setting up python2.7:arm64 (2.7.17-1~18.04ubuntu1.6) ...
Setting up file (1:5.32-2ubuntu0.4) ...
Setting up libgcc-7-dev:arm64 (7.5.0-3ubuntu1~18.04) ...
Setting up libpython-stdlib:arm64 (2.7.15~rc1-1) ...
Setting up libpython2.7:arm64 (2.7.17-1~18.04ubuntu1.6) ...
Setting up libexpat1-dev:arm64 (2.2.5-3ubuntu0.2) ...
Setting up libmpc3:arm64 (1.1.0-1) ...
Setting up libpython2.7-dev:arm64 (2.7.17-1~18.04ubuntu1.6) ...
Setting up binutils:arm64 (2.30-21ubuntu1~18.04.5) ...
Setting up python2.7-dev:arm64 (2.7.17-1~18.04ubuntu1.6) ...
Setting up python:arm64 (2.7.15~rc1-1) ...
Setting up libpython-dev:arm64 (2.7.15~rc1-1) ...
Setting up python-dev:arm64 (2.7.15~rc1-1) ...
Setting up cython:arm64 (0.26.1-0.4) ...
Setting up cpp-7:arm64 (7.5.0-3ubuntu1~18.04) ...
Setting up cpp:arm64 (4:7.4.0-1ubuntu2.3) ...
Setting up gcc-7:arm64 (7.5.0-3ubuntu1~18.04) ...
Setting up gcc:arm64 (4:7.4.0-1ubuntu2.3) ...
Processing triggers for libc-bin (2.27-3ubuntu1.4) ...
Removing intermediate container 995d04075a29
 ---> 555cac76aa77
Successfully built 555cac76aa77
Successfully tagged abc:2

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM