【问题标题】:How to install Alpine Linux packages in the gliderlabs/alpine Docker image, when apk add fails?当 apk 添加失败时,如何在 gliderlabs/alpine Docker 映像中安装 Alpine Linux 软件包?
【发布时间】:2019-05-17 18:16:31
【问题描述】:

我想在 Docker 映像中安装像 python 这样的 Alpine 包,但是当我运行 docker build - < Dockerfile(或使用 IntelliJ 构建)时,我得到了

ERROR: unsatisfiable constraints:
  /bin/sh (virtual):
    provided by: busybox
    required by:
                 alpine-baselayout-3.1.0-r0[/bin/sh]
                 alpine-baselayout-3.1.0-r0[/bin/sh]
The command '/bin/sh -c apk add --update python' returned a non-zero code: 2

我正在使用以下 Dockerfile,它是从 github.com/gliderlabs/docker-alpine/blob/master/docs/usage.md 的文档中导出的

FROM gliderlabs/alpine:latest
RUN apk add --update python

交互使用 docker 镜像时出现同样的错误

当我使用docker run -it gliderlabs/alpine:latest /bin/sh 然后apk add --update pythonapk add python 我得到同样的错误。

当我执行apk update 时,我得到OK: 9543 distinct packages available,但是当我执行apk upgrade 时,我得到同样的错误。

系统信息

我使用的是 Arch Linux 4.19.8。

gliderlabs/alpine:latest 的 Image ID 是sha256:673b8178133a04ed1de21d6cf1a729f8aaf9469d4550005ede89e7142efd9459

docker run gliderlabs/alpine:latest which apk 的输出是/sbin/apk

docker 版本是 18.09.0-ce。

相关其他信息

Docker Alpine /bin/sh apk not found 看起来很相似(虽然在 CentOS 上)但没有分辨率,一条评论链接到:

/bin/sh: 1: apk: not found while creating docker image,但答案是切换到 apk,我已经这样做了(文档对此非常清楚)。

Docker: Using apt-key with alpine image 还建议使用apk add,这就是我正在做的事情。

编辑

按照@larsks 的建议,您可以运行apk search --update python | grep '^python',它显示我有python3-3.6.6-r0 可用,但没有python。但是,当我尝试 apk add python3-3.6.6-r0 时,我得到了

ERROR: unsatisfiable constraints:
  python3-3.6.6-r0 (missing):
    required by: world[python3-3.6.6-r0]
  /bin/sh (virtual):
    provided by: busybox
    required by: alpine-baselayout-3.1.0-r0[/bin/sh] alpine-baselayout-3.1.0-r0[/bin/sh]

此外,这也无法解释为什么 apk upgrade 会失败并出现与 apk add python 相同的错误。

当我尝试apk add --update python3 时,我得到了

fetch http://alpine.gliderlabs.com/alpine/v3.8/main/x86_64/APKINDEX.tar.gz
fetch http://alpine.gliderlabs.com/alpine/v3.8/community/x86_64/APKINDEX.tar.gz
ERROR: unsatisfiable constraints:
  /bin/sh (virtual):
    provided by: busybox
    required by: alpine-baselayout-3.1.0-r0[/bin/sh] alpine-baselayout-3.1.0-r0[/bin/sh]

【问题讨论】:

  • 使用alpine 图像而不是gliderlabs/alpine
  • @larsks 是的,这就是问题所在!

标签: docker alpine


【解决方案1】:

当前 Alpine 映像中没有可用的 python 包。如果你看一下apk search --update python 的输出,你会发现:

/ # apk search python | grep '^python'
[...]
python2-2.7.15-r1
python3-3.6.6-r0
[...]

也就是说,您需要根据您想要的版本显式安装python2python3

所以使用最新的 Alpine 映像(3.8),我可以通过运行成功安装python3

/ # apk add --update python3
fetch http://dl-cdn.alpinelinux.org/alpine/v3.8/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.8/community/x86_64/APKINDEX.tar.gz
(1/11) Installing libbz2 (1.0.6-r6)
(2/11) Installing expat (2.2.5-r0)
(3/11) Installing libffi (3.2.1-r4)
(4/11) Installing gdbm (1.13-r1)
(5/11) Installing xz-libs (5.2.4-r0)
(6/11) Installing ncurses-terminfo-base (6.1_p20180818-r1)
(7/11) Installing ncurses-terminfo (6.1_p20180818-r1)
(8/11) Installing ncurses-libs (6.1_p20180818-r1)
(9/11) Installing readline (7.0.003-r0)
(10/11) Installing sqlite-libs (3.24.0-r0)
(11/11) Installing python3 (3.6.6-r0)
Executing busybox-1.28.4-r1.trigger
OK: 67 MiB in 24 packages

您报告的第二个问题似乎源于您使用的是gliderlabs/alpine 图像而不是官方的alpine 图像。如果我使用gliderlabs/alpine,我会看到同样的问题,但使用alpine 一切正常。 gliderlabs/alpine 的图片看起来很糟糕。

【讨论】:

  • 哦,奇怪的是 docs 没有显示这个,但是如果我这样做 apk add python3-3.6.6-r0 我会得到类似的错误,即 ERROR: unsatisfiable constraints: python3-3.6.6-r0 (missing): required by: world[python3-3.6.6-r0] 而且,这不能解释为什么 apk upgrade也失败了。我会将这个新错误添加到问题中。
  • 我很确定apk 不支持您尝试使用的语法。只需运行apk add --update python3
  • 你的意思是升级语法?当我运行apk 时,它在系统维护下显示upgrade,我在其他地方也看到了它。无论如何,当我尝试python3 时仍然出现同样的错误,请参阅问题。
  • 我的意思是我认为你不能将包指定为python3-3.6.6-r0
  • 是的,同意,但真正的问题似乎是图像,文档必须是错误的什么的。谢谢!
猜你喜欢
  • 2018-06-25
  • 2016-09-08
  • 1970-01-01
  • 2021-06-16
  • 2022-01-01
  • 2021-11-07
  • 2020-05-17
  • 2016-10-08
  • 1970-01-01
相关资源
最近更新 更多