LoginSignup
1
1

More than 5 years have passed since last update.

Check! docker-compose で urllib3 が原因でエラーになる場合の対処

Posted at

こんばんは、 @dz_ こと大平かづみです。

Prologue - はじめに

vagrant の ubuntu/trusty64 をアップデートしたら、vagrant 内で使っている docker-compose が動かなくなってしまったので対応しました。その備忘録です。

エラー内容

docker-compose を利用しようとすると、以下のように python のエラーが発生しました。

エラーの抜粋

vagrant@vagrant-ubuntu-trusty-64:~$ docker-compose --help

  ... <略> ...

  File "/usr/local/lib/python2.7/dist-packages/docker/transport/ssladapter.py", line 22, in <module>
    urllib3.connection.match_hostname = match_hostname
AttributeError: 'module' object has no attribute 'connection'

発生環境

  • vagrant box: 'ubuntu/trusty64' (v20170131.0.0) (Ubuntu 14.04.5 LTS)
# python の docker 関連のバージョンを確認する
vagrant@vagrant-ubuntu-trusty-64:~$ pip freeze | grep docker
docker==2.0.2
docker-compose==1.10.1
docker-pycreds==0.2.1
dockerpty==0.4.1

# Docker のバージョンを確認する
vagrant@vagrant-ubuntu-trusty-64:~$ docker version
Client:
 Version:      1.13.0
 API version:  1.25
 Go version:   go1.7.3
 Git commit:   49bf474
 Built:        Tue Jan 17 09:50:17 2017
 OS/Arch:      linux/amd64

Server:
 Version:      1.13.0
 API version:  1.25 (minimum version 1.12)
 Go version:   go1.7.3
 Git commit:   49bf474
 Built:        Tue Jan 17 09:50:17 2017
 OS/Arch:      linux/amd64
 Experimental: false

調査

こちらの記事を参照すると、どうやら python の urllib3 のバージョンが合わないようです。 urllib3 の最新バージョンは 1.20 なのに、なぜか 1.7.1 が入っていました。

更に調べると、こちらの issue でも指摘されているように、 apt-get でインストールされる python-urllib3 が 1.7.1 なのでした。

# python の urllib3 のバージョンを確認する
vagrant@vagrant-ubuntu-trusty-64:~$ pip freeze | grep urllib3
urllib3==1.7.1

# apt-get でインストールされた python-urllib3 のバージョンを確認する
vagrant@vagrant-ubuntu-trusty-64:~$ dpkg --list | grep urllib3
ii  python-urllib3                       1.7.1-1ubuntu4                      all          HTTP library with thread-safe connection pooling for Python
ii  python-urllib3-whl                   1.7.1-1ubuntu4                      all          HTTP library with thread-safe connection pooling

だがしかし…

単純に pip install urllib3=1.20 でインストールしても、 docker は 1.7.1 の方を見てしまい、うまく行きませんでした。 そこで、 apt-get remove python-urllib3 python-urllib3-whl で取り除くとたしかに docker は動くのですが、今度は pip も一緒にアンイストールされてしまい…、これではだめですね(´・ω・`)

結論

私はこのとき、vagrant 内で docker-compose を使いたいのでした。これを達成するには、方法は2つありそうです。

ひとつは、 apt-getpython-urllib3* は削除し、 pipapt-get を使わず get-pip.py でインストールする方法でしょう。

そして、もうひとつは、Ubuntu のバージョンを上げてしまうことでした。

なぜかというと、 ubuntu/trusty (14.04) でインストールされる python-urllib31.7.1-1build1 だそうだが、 ubuntu/xenial (16.04) でインストールされる python-urllib31.13.1-2 なんだそうです。

ということで、 Ubuntu を 16.04 に更新することで事なきを得ました!!

(Ubuntu 16.04 でも urllib3 が最新バージョンではないですが、docker-compose の利用には問題ありませんでした。)

Epilogue - おわりに

発生環境が限られるエラーかもしれませんが、どなたかの参考になれば幸いです m(_ _)m

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1