快速解决docker-py api版本不兼容的问题
docker提供了Python、Go等编程语言的api。最近打算用dockerSDKforPython(以下简称docker-py)做点东西,本来以为按照官网上的步骤安装很简单,pipinstalldocker就行,然而出现了版本不兼容的问题。
报错如下:
docker.errors.APIError:400ClientError:BadRequest("clientisnewerthanserver(clientAPIversion:1.30,serverAPIversion:1.19)")
可以使用指令dockerversion查看版本号,果然api版本是1.19,但是docker-py的版本是1.30。在docker-py官网里找一找解决方法,from_env()的解释如下:
from_env() Returnaclientconfiguredfromenvironmentvariables. TheenvironmentvariablesusedarethesameasthoseusedbytheDockercommand-lineclient.Theyare: DOCKER_HOST TheURLtotheDockerhost. DOCKER_TLS_VERIFY VerifythehostagainstaCAcertificate. DOCKER_CERT_PATH ApathtoadirectorycontainingTLScertificatestousewhenconnectingtotheDockerhost. Parameters: version(str)–TheversionoftheAPItouse.Settoautotoautomaticallydetecttheserver'sversion.Default:1.26 timeout(int)–DefaulttimeoutforAPIcalls,inseconds. ssl_version(int)–AvalidSSLversion. assert_hostname(bool)–Verifythehostnameoftheserver. environment(dict)–Theenvironmenttoreadenvironmentvariablesfrom.Default:thevalueofos.environ
有一个参数可以指定version,于是这样写:client=docker.from_env(version='1.19')似乎就能避免版本不兼容的问题了。然而还是报错:
ValueError:zerolengthfieldnameinformat
搜了一下这是因为我的python版本是2.6,在对参数解析时出现格式问题,没办法,只好升级python2.7了。
在官网的change日志中可以看到,2.0版本之后就不再支持python2.6了。
2.0.0 ... Breakingchanges DroppedsupportforPython2.6
将python2.6升级到2.7,不仅要编译安装python2.7,还要把/usr/local/bin/pip2.7软连接给/usr/bin/pip以覆盖原来的pip2.6,然后重新pipinstalldocker
如果是centos系统,不要忘了修改/usr/bin/yum,将第一行#!/usr/bin/python改为#!/usr/bin/python2.6,否则yum指令无法使用。
以上这篇快速解决docker-pyapi版本不兼容的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。