alpine使用的避坑指南


alpine,是一個重量僅為5 MB的最小Linux發行版。它還有基本的linux工具和一個不錯的包管理器APK。APK非常穩定,有相當數量的包。由於體積小,在容器中很受歡迎,但是使用上坑也很多,大部分可能是我們的無知吧。

坑1 : 下載慢

解決:
echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main" > /etc/apk/repositories \
&& echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/community" >> /etc/apk/repositories \
&& echo "https://mirror.tuna.tsinghua.edu.cn/alpine/edge/testing" >> /etc/apk/repositories

坑2: 找不到包

解決: 搜索 https://pkgs.alpinelinux.org/packages ,加入指定的“Branch”和“Repository”的源到/etc/apk/repositories,就可以apk add

 

坑3: 安裝失敗

ERROR: https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/community: Bad file descriptor
WARNING: Ignoring APKINDEX.79f426e4.tar.gz: Bad file descriptor
ERROR: unsatisfiable constraints:
  openssh (missing):
    required by: world[openssh]

解決:

apk add  openssh --no-cache #加--no-cache, 另外,還能減少鏡像體積

 

坑4:鏡像體積大,想刪除不再使用的包

apk add 加 -t 參數 

-t, --virtual NAME Instead of adding all the packages to 'world', create a new virtual package with the listed dependencies and add that to 'world'; the
actions of the command are easily reverted by deleting the virtual package
這意味着當您安裝軟件包時,這些軟件包不會添加到全局軟件包中。這種變化可以很容易地回滾/刪除。所以,如果我需要gcc來編譯程序,但是一旦程序被編譯,我就不再需要gcc了。

我可以在虛擬包中安裝gcc和其他必需的包,並且可以刪除所有依賴項,並刪除此虛擬包名稱。以下是示例用法

apk add --virtual mypacks gcc vim
apk del mypacks
使用第一個命令安裝的所有18個軟件包將被下一個命令刪除。

注意:同一個-t參數會覆蓋之前的所有安裝包,所有對動態鏈接庫最好不使用-t ,或者保證此參數不重復。

 

坑5:時間不同步

echo "Asia/Shanghai" > /etc/timezone
apk add –no-cache tzdata
TZ=Asia/Shanghai
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

 

坑6:用戶(組)和宿主機不兼容

解決:

addgroup -g 1200 -S www \
     && adduser -u 1200 -D -S -G www www

坑7:不兼容glibc

解決:

使用最新穩定版本的alpine,

#再安裝編譯環境
apk add --virtual .build-base --no-cache 
autoconf \
automake \
g
++ \
make \

linux-headers \
bsd-compat-headers 
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM