Docker add python 出現 ERROR: unsatisfiable constraints 解決方法

心得

最近在使用 CI/CD 腳本要 build Docker 的時候發現一個問題,以前原本寫好的腳本會出現錯誤訊息就 build 失敗了 QQ …

錯誤訊息如:

$ apk add --no-cache python py-pip
 fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
 fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/community/x86_64/APKINDEX.tar.gz
 ERROR: unsatisfiable constraints:
   python (missing):
     required by: world[python]

解決方法

先說明一下如何解決這個問題,解決方法有兩種

解決方法一 (推薦)

修改 python 升級成 python3py-pip 升級成 py3-pip

$ apk add --no-cache python3 py3-pip
 fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
 fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/community/x86_64/APKINDEX.tar.gz
 (1/34) Installing libbz2 (1.0.8-r1)
 (2/34) Installing expat (2.2.9-r1)
 (3/34) Installing libffi (3.3-r2)
 (4/34) Installing gdbm (1.13-r1)
 (5/34) Installing xz-libs (5.2.5-r0)
 (6/34) Installing readline (8.0.4-r0)
 (7/34) Installing sqlite-libs (3.32.1-r0)
 (8/34) Installing python3 (3.8.3-r0)
 (9/34) Installing py3-appdirs (1.4.4-r1)
 (10/34) Installing py3-ordered-set (4.0.1-r0)
 (11/34) Installing py3-parsing (2.4.7-r0)
 (12/34) Installing py3-six (1.15.0-r0)
 (13/34) Installing py3-packaging (20.4-r0)
 (14/34) Installing py3-setuptools (47.0.0-r0)
 (15/34) Installing py3-chardet (3.0.4-r4)
 (16/34) Installing py3-idna (2.9-r0)
 (17/34) Installing py3-certifi (2020.4.5.1-r0)
 (18/34) Installing py3-urllib3 (1.25.9-r0)
 (19/34) Installing py3-requests (2.23.0-r0)
 (20/34) Installing py3-msgpack (1.0.0-r0)
 (21/34) Installing py3-lockfile (0.12.2-r3)
 (22/34) Installing py3-cachecontrol (0.12.6-r0)
 (23/34) Installing py3-colorama (0.4.3-r0)
 (24/34) Installing py3-distlib (0.3.0-r0)
 (25/34) Installing py3-distro (1.5.0-r1)
 (26/34) Installing py3-webencodings (0.5.1-r3)
 (27/34) Installing py3-html5lib (1.0.1-r4)
 (28/34) Installing py3-pytoml (0.1.21-r0)
 (29/34) Installing py3-pep517 (0.8.2-r0)
 (30/34) Installing py3-progress (1.5-r0)
 (31/34) Installing py3-toml (0.10.1-r0)
 (32/34) Installing py3-retrying (1.3.3-r0)
 (33/34) Installing py3-contextlib2 (0.6.0-r0)
 (34/34) Installing py3-pip (20.1.1-r0)
 Executing busybox-1.31.1-r16.trigger
 OK: 70 MiB in 54 packages

解決方法二 (不推薦)

修改 Docker 版本 image: docker:stable 改成指定版本的 image: docker:19.03.10 換成還存在 python2 的 image 版本

原因

會出現問題其實是因為 Alpine 3.12 在這個 commit 移除了 python2,而 docker 在 PR#239 升級到 Alpine 3.12,所以就沒辦法使用 python2 拉 ~

參考資料