こんばんは、 @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-get
の python-urllib3*
は削除し、 pip
を apt-get
を使わず get-pip.py
でインストールする方法でしょう。
そして、もうひとつは、Ubuntu のバージョンを上げてしまうことでした。
なぜかというと、 ubuntu/trusty (14.04)
でインストールされる python-urllib3
は 1.7.1-1build1
だそうだが、 ubuntu/xenial (16.04)
でインストールされる python-urllib3
は 1.13.1-2
なんだそうです。
- How to install python-urllib3 on Ubuntu 14.04 (Trusty Tahr)
- How to install python-urllib3 on Ubuntu 16.04 (Xenial Xerus)
ということで、 Ubuntu を 16.04
に更新することで事なきを得ました!!
(Ubuntu 16.04 でも urllib3
が最新バージョンではないですが、docker-compose の利用には問題ありませんでした。)
Epilogue - おわりに
発生環境が限られるエラーかもしれませんが、どなたかの参考になれば幸いです m(_ _)m