语境
尝试使用安装 python3 包时
python3 -m pip install absl-py
如果lsb-release
安装了软件包,它将失败(这是我的情况并且是强制性的)。
挖掘后我发现,pip 将在内部调用lsb_release -a
这将导致此错误...我可以使用以下 Dockerfile 轻松重现它
协议
创建这个Dockerfile
:
# ref: https://hub.docker.com/r/opensuse/tumbleweed
FROM opensuse/tumbleweed
RUN zypper update -y \
&& zypper install -y lsb-release \
&& zypper clean -a
RUN lsb_release -a
观察到的
docker build --tag=so .
...
---> 8330cfe918d5
Step 3/3 : RUN lsb_release -a
---> Running in 488762fb27a3
/usr/bin/lsb_release: line 122: getopt: command not found
The command '/bin/sh -c lsb_release -a' returned a non-zero code: 2
测试
我尝试安装“gengetopt”、“gnu-getopt”或“perl-Getopt-Long-Descriptive”但没有成功(ed 仍然发生同样的错误)。
解决方法
一种解决方法是安装元包lsb
,不幸的是它需要时间(184 个包)。
我正在寻找一个“更小”的包来修复它(即减少依赖项)。
协议
FROM opensuse/tumbleweed
RUN zypper update -y \
&& zypper install -y lsb-release \
&& zypper clean -a
RUN zypper update -y \
&& zypper install -y lsb \
&& zypper clean -a
RUN lsb_release -a
观察到的
docker build --tag=workaround .
...
Step 4/4 : RUN lsb_release -a
---> Running in 6d93c78f7a47
LSB Version: core-2.0-noarch:core-3.2-noarch:core-4.0-noarch:core-2.0-x86_64:core-3.2-x86_64:core-4.0-x86_64:desktop-4.0.fake-amd64:desktop-4.0.fake-noarch:graphics-2.0-amd64:graphics-2.0-noarch:graphics-3.2-amd64:graphics-3.2-noarch:graphics-4.0.fake-amd64:graphics-4.0.fake-noarch
Distributor ID: openSUSE
Description: openSUSE Tumbleweed
Release: 20201121
Codename: n/a
Removing intermediate container 6d93c78f7a47
---> c11779133426
Successfully built c11779133426
Successfully tagged os:latest