1. 程式人生 > >樹莓派4B安裝docker-compose(64位Linux)

樹莓派4B安裝docker-compose(64位Linux)

準備工作

樹莓派4B已裝好64位Linux,並且裝好了19.03.1版本的Docker,具體的安裝步驟請參考《樹莓派4B安裝64位Linux(不用顯示器鍵盤滑鼠)》

安裝docker-compose的步驟

  1. apt更新:
apt-get update
  1. 安裝python和pip:
apt-get install -y python python-pip
  1. 安裝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
  1. 用pip安裝docker-compose:
pip install docker-compose
  1. 將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>試試:

shell
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已經成功,希望您在安裝的時候,本文能給您一些參考;

為什麼不用官方的安裝方式

無論何時,官方的安裝方法都是首選,那麼本文為何要自己折騰這麼多步驟呢?

  1. 我們來看下官方安裝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
  1. 上述命令是下載指定地址的檔案,這個地址的具體內容,我們可以用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錯誤;

  1. 在一臺x86架構的Linux伺服器上試試,上述下載命令對應的地址是https://github.com/docker/compose/releases/download/1.24.1/docker-compose-Linux-x86_64,此地址是有效的,因此可以得出一個結論:docker官方並沒有釋出64位ARM架構的docker-compose安裝檔案
  2. 如下圖,在官方文件上可以看到1.24.1版的docker-compose共釋出三個,沒有ARM架構:

    綜上所述,在Docker官方不支援的背景下,只能採用變通策略,用pip來安裝了。