樹莓派4B安裝docker-compose(64位Linux)
準備工作
樹莓派4B已裝好64位Linux,並且裝好了19.03.1版本的Docker,具體的安裝步驟請參考《樹莓派4B安裝64位Linux(不用顯示器鍵盤滑鼠)》
安裝docker-compose的步驟
- apt更新:
apt-get update
- 安裝python和pip:
apt-get install -y python python-pip
- 安裝libffi-dev:
apt-get install libffi-dev
如果不安裝libffi-dev的話,接下來在安裝docker-compose的時候會報錯,提示找不到ffi.h檔案,錯誤資訊如下:
aarch64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fdebug-prefix-map=/build/python2.7-md9kAN/python2.7-2.7.16=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DUSE__THREAD -DHAVE_SYNC_SYNCHRONIZE -I/usr/include/ffi -I/usr/include/libffi -I/usr/include/python2.7 -c c/_cffi_backend.c -o build/temp.linux-aarch64-2.7/c/_cffi_backend.o c/_cffi_backend.c:15:10: fatal error: ffi.h: No such file or directory #include <ffi.h> ^~~~~~~ compilation terminated. error: command 'aarch64-linux-gnu-gcc' failed with exit status 1
- 用pip安裝docker-compose:
pip install docker-compose
- 將python2.7的dist-packages資料夾複製到docker的工作目錄下:
cd /usr/local/lib/python2.7/dist-packages && \
cp -r backports /usr/local/lib/python2.7/dist-packages/docker/transport/
如果不執行此操作,接下來在執行docker-compose命令的時候會報錯,提示找不到名為ssl_match_hostname的module,錯誤資訊如下:
shell File "/usr/local/lib/python2.7/dist-packages/docker/tls.py", line 5, in <module> from .transport import SSLHTTPAdapter File "/usr/local/lib/python2.7/dist-packages/docker/transport/__init__.py", line 3, in <module> from .ssladapter import SSLHTTPAdapter File "/usr/local/lib/python2.7/dist-packages/docker/transport/ssladapter.py", line 23, in <module> from backports.ssl_match_hostname import match_hostname ImportError: No module named ssl_match_hostname ··· 6. 此時已經安裝成功了,執行命令<font color="blue">docker-compose version</font>試試:
root@raspbian:~# docker-compose version
docker-compose version 1.24.1, build 4667896
docker-py version: 3.7.3
CPython version: 2.7.16
OpenSSL version: OpenSSL 1.1.1c 28 May 2019
```
至此,在64位作業系統上安裝docker-compose已經成功,希望您在安裝的時候,本文能給您一些參考;
為什麼不用官方的安裝方式
無論何時,官方的安裝方法都是首選,那麼本文為何要自己折騰這麼多步驟呢?
- 我們來看下官方安裝docker-compose的步驟,地址是:https://docs.docker.com/compose/install/ ,第一步是下載:
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- 上述命令是下載指定地址的檔案,這個地址的具體內容,我們可以用echo命令來檢視:
root@raspbian:~/harbor# echo https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)
https://github.com/docker/compose/releases/download/1.24.1/docker-compose-Linux-aarch64
從上述控制檯資訊可見,docker-compose的下載地址是https://github.com/docker/compose/releases/download/1.24.1/docker-compose-Linux-aarch64,這樣的地址能否下載到對應的檔案,您將其貼上在瀏覽器訪問一下便知道,這個地址會返回404錯誤;
- 在一臺x86架構的Linux伺服器上試試,上述下載命令對應的地址是https://github.com/docker/compose/releases/download/1.24.1/docker-compose-Linux-x86_64,此地址是有效的,因此可以得出一個結論:docker官方並沒有釋出64位ARM架構的docker-compose安裝檔案
- 如下圖,在官方文件上可以看到1.24.1版的docker-compose共釋出三個,沒有ARM架構:
綜上所述,在Docker官方不支援的背景下,只能採用變通策略,用pip來安裝了。