成功的把樹莓派3B+的 docker-compose 升級到 1.28

起因

樹莓派裏 apt 下載的 docker-compose 最新版也只是 1.8.2 版本
奈何執行 docker-compose.yaml 文件又是 version: "3" 版本的

猜測之所以能升成功,有一種巧合在裏面,我是不小心把python2.7 給刪了,又安裝上了,但 /usr/bin/python 用的是3.5版本的

解決

官方安裝腳本爲
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

但是在樹莓派 3B+ 上,如果執行echo命令查看此鏈接地址

echo "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)"

結果

https://github.com/docker/compose/releases/download/1.25.4/docker-compose-Linux-armv7l

意思官方並沒有發佈 ARM 架構的 docker-compose 安裝文件,所以此方法行不通,現在採用 pip 來安裝

使用 pip 安裝 docker-compose
1.apt更新
sudo apt-get update
2.安裝python和pip
sudo apt-get install -y python python-pip
3.安裝libffi-dev
sudo apt-get install libffi-dev

可能會出現的錯誤:如果不安裝 libffi-dev 的話,後面使用 pip 安裝 docker-compose 的時候會報錯,提示找不到 ffi.h 文件

arm-linux-gnueabihf-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-InigCj/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-armv7l-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 'arm-linux-gnueabihf-gcc' failed with exit status 1  
4.用pip安裝docker-compose
sudo pip install docker-compose
5.拷貝python2.7的dist-packages文件夾到docker的工作目錄下
cd  /usr/local/lib/python2.7/dist-packages
sudo cp -r backports /usr/local/lib/python2.7/dist-packages/docker/transport/

如果不執行此操作,使用 docker-compose 命令會報錯:No module named ssl_match_hostname

Traceback (most recent call last):
  File "/usr/local/bin/docker-compose", line 5, in <module>
    from compose.cli.main import main
  File "/usr/local/lib/python2.7/dist-packages/compose/cli/main.py", line 18, in <module>
    import docker.errors
  File "/usr/local/lib/python2.7/dist-packages/docker/__init__.py", line 2, in <module>
    from .api import APIClient
  File "/usr/local/lib/python2.7/dist-packages/docker/api/__init__.py", line 2, in <module>
    from .client import APIClient
  File "/usr/local/lib/python2.7/dist-packages/docker/api/client.py", line 10, in <module>
    from .build import BuildApiMixin
  File "/usr/local/lib/python2.7/dist-packages/docker/api/build.py", line 6, in <module>
    from .. import auth
  File "/usr/local/lib/python2.7/dist-packages/docker/auth.py", line 9, in <module>
    from .utils import config
  File "/usr/local/lib/python2.7/dist-packages/docker/utils/__init__.py", line 3, in <module>
    from .decorators import check_resource, minimum_version, update_headers
  File "/usr/local/lib/python2.7/dist-packages/docker/utils/decorators.py", line 4, in <module>
    from . import utils
  File "/usr/local/lib/python2.7/dist-packages/docker/utils/utils.py", line 13, in <module>
    from .. import tls
  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.安裝完畢

執行一次docker-compose命令測試是否安裝成功

docker-compose version

安裝成功則能成功打印版本號信息。

如果報錯 No module named shutil_get_terminal_size

Traceback (most recent call last):
  File "/usr/local/bin/docker-compose", line 5, in <module>
    from compose.cli.main import main
  File "/usr/local/lib/python2.7/dist-packages/compose/cli/main.py", line 52, in <module>
    from .formatter import ConsoleWarningFormatter
  File "/usr/local/lib/python2.7/dist-packages/compose/cli/formatter.py", line 15, in <module>
    from backports.shutil_get_terminal_size import get_terminal_size
ImportError: No module named shutil_get_terminal_size

那麼安裝一下ipython

sudo apt-get install ipython

安裝完後再次執行docker-compose命令就沒問題

pi@raspberrypi:/var/lib/dpkg $ docker-compose version
docker-compose version 1.28.2, build unknown
docker-py version: 4.4.1
CPython version: 3.5.3
OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019

參考:
E: Sub-process /usr/bin/dpkg returned an error cod
樹莓派4b安裝Docker與docker-compose過程及問題解決
arm服務器安裝docker及docker-compose
編譯arm 版本docker-compose



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章