1. docker客戶端配置
需在docker.service文件中ExecStart 后面添加配置嚎花,開放2375接口
-H unix://var/run/docker.sock -H tcp://0.0.0.0:2375
這塊有個(gè)坑箫攀,各個(gè)機(jī)器安裝不同的路徑柴墩,docker.service文件所在位置不同摹恨,需使用命令systemctl status docker.service
查看docker.service配置文件所在
systemctl daemon-reload 重啟
systemctl restart docker 重啟docker
ps -ef | grep docker 查看docker進(jìn)程是否開放了2375接口
2. Java使用docker-java連接客戶端
導(dǎo)包登下,網(wǎng)上可搜docker-java
說一下使用中遇到的問題:本地連接服務(wù)器測(cè)試調(diào)用docker-api查看和重啟容器藻糖,沒有問題淹冰,但是上了測(cè)試服務(wù)器之后,測(cè)試報(bào)錯(cuò)
說對(duì)應(yīng)的host可能為空巨柒,在本地測(cè)試沒問題樱拴,上了服務(wù)器之后出現(xiàn)了拿不到host值,網(wǎng)上找了各種帖子之后洋满,沒有對(duì)應(yīng)的場(chǎng)景和解決方案晶乔,后面跟著報(bào)錯(cuò)日志點(diǎn)進(jìn)源碼里面查找,最后定位到ApacheConnector類中
u.getHost()
報(bào)出來的錯(cuò)
final Object proxyUri;
proxyUri = config.getProperty(ClientProperties.PROXY_URI);
if (proxyUri != null) {
final URI u = getProxyUri(proxyUri);
final HttpHost proxy = new HttpHost(u.getHost(), u.getPort(), u.getScheme());
final String userName;
userName = ClientProperties.getValue(config.getProperties(),ClientProperties.PROXY_USERNAME, String.class);
發(fā)現(xiàn)走了proxyUri這個(gè)字段牺勾,本地測(cè)試沒有這個(gè)值正罢,為null,所以沒進(jìn)去驻民,然后再服務(wù)器上這個(gè)值不為null翻具,就進(jìn)了這個(gè)方法,然后get出錯(cuò)回还。為了弄清楚這個(gè)值取的是什么裆泳,本地連接測(cè)試服務(wù)器,調(diào)用debug方式查看柠硕,proxyUri這個(gè)值為proxy_host工禾,最后又找到原來是DefaultDockerClientConfig這個(gè)類中的 createDefaultConfigBuilder方法中取的系統(tǒng)環(huán)境變量System.getenv(), (Properties) System.getProperties().clone()
,打印了這個(gè)值后發(fā)現(xiàn),原來是我們docker容器的環(huán)境變量(服務(wù)器上的服務(wù)是運(yùn)行在對(duì)應(yīng)的docker容器中)設(shè)置的JVM的參數(shù),奇怪的是我查看了這個(gè)代理uri的key值是String PROXY_URI = "jersey.config.client.proxy.uri"
跟我們?cè)O(shè)置的環(huán)境變量的key不一樣帜篇,但是取得還是這個(gè)值糙捺,后來在創(chuàng)建dockerClient前設(shè)置環(huán)境變量參數(shù)刪除了我們jvm的對(duì)應(yīng)的代理設(shè)置參數(shù)的key和這個(gè)ClientProperties.PROXY_URI,最后發(fā)布服務(wù)器上測(cè)試笙隙,可以了洪灯。。竟痰。
System.getProperties().remove("http.proxyHost");
System.getProperties().remove("http.proxyPort");
System.getProperties().remove("https.proxyHost");
System.getProperties().remove("https.proxyPort");
System.getProperties().remove(ClientProperties.PROXY_URI);
// 創(chuàng)建client
DockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder()