当 apk 添加失败时,如何在 gliderlabs/alpine Docker 映像中安装 Alpine Linux 包?
How to install Alpine Linux packages in the gliderlabs/alpine Docker image, when apk add fails?
我想在 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
我正在使用从 github.com/gliderlabs/docker-alpine/blob/master/docs/usage.md
中的文档派生的以下 Docker 文件
FROM gliderlabs/alpine:latest
RUN apk add --update python
交互式使用 docker 图像时出现同样的错误
当我使用 docker run -it gliderlabs/alpine:latest /bin/sh
然后 apk add --update python
或 apk add python
时,我得到同样的错误。
当我执行 apk update
时,我得到 OK: 9543 distinct packages available
,但是当我执行 apk upgrade
时,我得到同样的错误。
系统信息
我正在使用 Arch Linux 4.19.8.
gliderlabs/alpine:最新的图像 ID 是 sha256:673b8178133a04ed1de21d6cf1a729f8aaf9469d4550005ede89e7142efd9459
。
docker run gliderlabs/alpine:latest which apk
的输出是/sbin/apk
。
docker 版本为 18.09.0-ce。
其他相关信息
看起来很相似(虽然在 CentOS 上)但没有解决方案,一个评论链接到:
/bin/sh: 1: apk: not found while creating docker image 但答案是切换到我已经在做的 apk
(文档对此非常清楚)。
还建议使用 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 映像中没有 python
包可用。如果您查看 apk search --update python
的输出,您会发现:
/ # apk search python | grep '^python'
[...]
python2-2.7.15-r1
python3-3.6.6-r0
[...]
也就是说,您需要根据所需的版本显式安装 python2
或 python3
。
因此,使用最新的 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
图片似乎有问题。
我想在 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
我正在使用从 github.com/gliderlabs/docker-alpine/blob/master/docs/usage.md
中的文档派生的以下 Docker 文件FROM gliderlabs/alpine:latest
RUN apk add --update python
交互式使用 docker 图像时出现同样的错误
当我使用 docker run -it gliderlabs/alpine:latest /bin/sh
然后 apk add --update python
或 apk add python
时,我得到同样的错误。
当我执行 apk update
时,我得到 OK: 9543 distinct packages available
,但是当我执行 apk upgrade
时,我得到同样的错误。
系统信息
我正在使用 Arch Linux 4.19.8.
gliderlabs/alpine:最新的图像 ID 是 sha256:673b8178133a04ed1de21d6cf1a729f8aaf9469d4550005ede89e7142efd9459
。
docker run gliderlabs/alpine:latest which apk
的输出是/sbin/apk
。
docker 版本为 18.09.0-ce。
其他相关信息
/bin/sh: 1: apk: not found while creating docker image 但答案是切换到我已经在做的 apk
(文档对此非常清楚)。
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 映像中没有 python
包可用。如果您查看 apk search --update python
的输出,您会发现:
/ # apk search python | grep '^python'
[...]
python2-2.7.15-r1
python3-3.6.6-r0
[...]
也就是说,您需要根据所需的版本显式安装 python2
或 python3
。
因此,使用最新的 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
图片似乎有问题。