当apk添加失败时,如何在gliderlabs / alpine Docker映像中安装Alpine Linux软件包?

时间:2018-12-17 11:23:04

标签: docker alpine

我想在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的图像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]

1 个答案:

答案 0 :(得分:3)

当前的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图像看来很差。