:::

在Docker舊版Debian裡安裝套件 / How to Handle the "Failed to fetch" Error When Running "apt-get update"?

8月 02, 2023 , , 0 Comments Edit Copy Download

2023-0513-180401.png

差點忘了編譯Docker映像檔的時候也是要安裝套件。


環境 / Environment

2023-0513-175241.png

https://hub.docker.com/layers/library/node/12.0/images/sha256-d97e1f326ca9ebdebfaaf6cc7252cce69e327e9b243faa37462e59fd2d93c025?context=explore 

我用的Docker映像檔是「node:12.0」。這是一個2019年的映像檔,作業系統是Debian 9 (stretch)。

2023-0513-175426.png

https://wiki.debian.org/LTS 

Stretch的支援時期僅到2022年6月30日。在現今2023年的時候,它已經不在支援列表了。

2023-05-13_17-35.png

因此當我們在Strectch直接執行「apt-get update」的時候,就會看到以下錯誤訊息:

Reading package lists...
W: The repository 'http://security.debian.org/debian-security stretch/updates Release' does not have a Release file.
W: The repository 'http://deb.debian.org/debian stretch Release' does not have a Release file.
W: The repository 'http://deb.debian.org/debian stretch-updates Release' does not have a Release file.
E: Failed to fetch http://security.debian.org/debian-security/dists/stretch/updates/main/binary-amd64/Packages  404  Not Found
E: Failed to fetch http://deb.debian.org/debian/dists/stretch/main/binary-amd64/Packages  404  Not Found
E: Failed to fetch http://deb.debian.org/debian/dists/stretch-updates/main/binary-amd64/Packages  404  Not Found
E: Some index files failed to download. They have been ignored, or old ones used instead.

這是因為原本作業系統要連上Debian伺服器去檢查的更新資訊,現在已經被移除的關係。

遇到這種情況要怎麼辦好呢?


修改更新網址 / Modify the sources.list

2023-0513-175841.png

https://stackoverflow.com/a/76095392

Alain Hernandez為Docker的使用者提供了一套解法。請在執行「apt-get update」之前,加上以下程式碼,以此修改更新網址:

#Update stretch repositories
RUN sed -i s/deb.debian.org/archive.debian.org/g /etc/apt/sources.list
RUN sed -i 's|security.debian.org|archive.debian.org/|g' /etc/apt/sources.list
RUN sed -i '/stretch-updates/d' /etc/apt/sources.list

2023-0513-180019.png

上述的做法是把更新網址從與原本的「security」改成了「archive」,這樣即使系統無法安裝最新版套件,至少也還能安裝之前的套件。

為了避免下次再遇到這樣的問題,我還是來把Docker映像檔備份一下好了orz


最後要來問的問題是:你在編譯Dockerfile最常遇到的問題是什麼呢?

歡迎在下面分享喔!