IT徒然草

IT関係のことを解説したり一人つらつら書いたり

Ubuntu 18.04でdocker-composeがImportErrorが発生して動かなくなったら

 

docker-composeを実行するとImportError: No module named backports.ssl_match_hostname

 
事件はUbuntu 18.04 LTSにインストールしたdocker-composeでフツーに
sudo docker-compose up -d
と何も考えずにタイプしたら起こりました。

Traceback (most recent call last):

  File "/usr/bin/docker-compose", line 11, in

    load_entry_point('docker-compose==1.17.1', 'console_scripts', 'docker-compose')()

  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 480, in load_entry_point

    return get_distribution(dist).load_entry_point(group, name)

  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2693, in load_entry_point

    return ep.load()

  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2324, in load

    return self.resolve()

  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2330, in resolve

    module = __import__(self.module_name, fromlist=['__name__'], level=0)

  File "/usr/lib/python2.7/dist-packages/compose/cli/main.py", line 17, in

    from . import errors

  File "/usr/lib/python2.7/dist-packages/compose/cli/errors.py", line 11, in

    from docker.errors import APIError

  File "/usr/lib/python2.7/dist-packages/docker/__init__.py", line 2, in

    from .api import APIClient

  File "/usr/lib/python2.7/dist-packages/docker/api/__init__.py", line 2, in

    from .client import APIClient

  File "/usr/lib/python2.7/dist-packages/docker/api/client.py", line 11, in

    from .build import BuildApiMixin

  File "/usr/lib/python2.7/dist-packages/docker/api/build.py", line 9, in

    from .. import utils

  File "/usr/lib/python2.7/dist-packages/docker/utils/__init__.py", line 2, in

    from .build import tar, exclude_paths

  File "/usr/lib/python2.7/dist-packages/docker/utils/build.py", line 5, in

    from .utils import create_archive

  File "/usr/lib/python2.7/dist-packages/docker/utils/utils.py", line 18, in

    from .. import tls

  File "/usr/lib/python2.7/dist-packages/docker/tls.py", line 5, in

    from .transport import SSLAdapter

  File "/usr/lib/python2.7/dist-packages/docker/transport/__init__.py", line 3, in

    from .ssladapter import SSLAdapter

  File "/usr/lib/python2.7/dist-packages/docker/transport/ssladapter.py", line 21, in

    from backports.ssl_match_hostname import match_hostname

ImportError: No module named backports.ssl_match_hostname

pi@pi-M730SR:~/Desktop/wordpress-docker-compose$ docker-compose -v

Traceback (most recent call last):

  File "/usr/bin/docker-compose", line 11, in

    load_entry_point('docker-compose==1.17.1', 'console_scripts', 'docker-compose')()

  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 480, in load_entry_point

    return get_distribution(dist).load_entry_point(group, name)

  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2693, in load_entry_point

    return ep.load()

  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2324, in load

    return self.resolve()

  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2330, in resolve

    module = __import__(self.module_name, fromlist=['__name__'], level=0)

  File "/usr/lib/python2.7/dist-packages/compose/cli/main.py", line 17, in

    from . import errors

  File "/usr/lib/python2.7/dist-packages/compose/cli/errors.py", line 11, in

    from docker.errors import APIError

  File "/usr/lib/python2.7/dist-packages/docker/__init__.py", line 2, in

    from .api import APIClient

  File "/usr/lib/python2.7/dist-packages/docker/api/__init__.py", line 2, in

    from .client import APIClient

  File "/usr/lib/python2.7/dist-packages/docker/api/client.py", line 11, in

    from .build import BuildApiMixin

  File "/usr/lib/python2.7/dist-packages/docker/api/build.py", line 9, in

    from .. import utils

  File "/usr/lib/python2.7/dist-packages/docker/utils/__init__.py", line 2, in

    from .build import tar, exclude_paths

  File "/usr/lib/python2.7/dist-packages/docker/utils/build.py", line 5, in

    from .utils import create_archive

  File "/usr/lib/python2.7/dist-packages/docker/utils/utils.py", line 18, in

    from .. import tls

  File "/usr/lib/python2.7/dist-packages/docker/tls.py", line 5, in

    from .transport import SSLAdapter

  File "/usr/lib/python2.7/dist-packages/docker/transport/__init__.py", line 3, in

    from .ssladapter import SSLAdapter

  File "/usr/lib/python2.7/dist-packages/docker/transport/ssladapter.py", line 21, in

    from backports.ssl_match_hostname import match_hostname

ImportError: No module named backports.ssl_match_hostname
 
...は?
しかし、aptによるとbackports.ssl_match_hostnameはすでにインストールされていました。

解決策(詳細な原因は不明です)

 
以下を走らせます。
sudo pycompile -p python-backports.ssl-match-hostname
このコマンドを実行するとモジュールの不足しているファイルが作成されます。

これで最初のコマンドがを動かし、直ったことを確認します。

参考(ありがとうございました)

 

(C)2020 EnjoySoftware All rights reserved.