使用dockerfile-maven-plugin發布docker到私有倉庫
要想擁有私有docker倉庫,需要安裝registry鏡像,最新版時2.0,具體可以看文檔:https://docs.docker.com/registry/。
1. docker pull registry
2. docker run -d -p 5000:5000 --restart=always --name registry registry:2
使用http://localhost:5000/v2/測試,返回"{}",表示安裝成功。
使用maven命令(mvn clean package)打包時,報:Failed to execute goal com.spotify:docker-maven-plugin:0.4.13:build (default-cli) on project config: Exception caught: java.util.concurrent.ExecutionException: com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: org.apache.http.conn.HttpHostConnectException: Connect to localhost:2375 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused
1. 首先確保,配置的docker.image.prefix時正確的,即配置了綁定倉庫。
1 <properties> 2 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 3 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 4 <java.version>1.8</java.version> 5<maven.test.skip>true</maven.test.skip> 6 <spring-cloud.version>Finchley.RELEASE</spring-cloud.version> 7 <dockerfile.maven.version>1.4.3</dockerfile.maven.version> 8 <docker.image.prefix>172.27.73.xx:5000</docker.image.prefix> 9</properties>
2. 編輯/etc/sysconfig/docker文件,我安裝的docker ce,沒有發現這個文件,如果有,則:
sudo vi /etc/sysconfig/docker //添加下面這行 other_args="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock" //保存 :wq! //重啟docker服務 service docker restart
3. 在windows系統環境變量中新建DOCKER_HOST值為tcp://{docker_ip}:2375,將這裏的{docker_ip},替換為docker所在的centos服務器IP或主機名(用主機名,需要windows配置hosts),可能需要重啟系統。
4. 修改/usr/lib/systemd/system/docker.service文件
sudo vi /usr/lib/systemd/system/docker.service //在ExecStart這一行後面加上(這裏就寫4個0,別改成自己的ip) -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock 改完後效果如下 ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock :wq! 保存退出 重新加載配置文件 systemctl daemon-reload 重啟docker :service docker restart 這樣才可以是/etc/default/docker中的配置項生效
重寫打包,發布鏡像,報:
Caused by: com.spotify.docker.client.exceptions.DockerException: java.util.concurrent.ExecutionException: com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: com.spotify.docker.client.shad ed.org.apache.http.conn.HttpHostConnectException: Connect to 172.27.73.xx:2375 [/172.27.73.xx] failed: Connection timed out: connect
我們首先查詢docker所在虛擬機在監聽哪些端口,使用命令:
netstat -tlunp
顯示:
tcp6 0 0 :::2375 :::* LISTEN -
2375端口,已在監聽。
那很有可能時防火墻的問題,在CentOS7中,默認會打開firewalld防火墻,如果防火墻打開後,默認情況下只會監聽在22號端口,也就是說主機對外暴露的端口只有22。
使用如下命令:
sudo iptables-save
查看防火墻暴漏的對外端口,發現2373端口沒有對位暴漏。
需要增加2373端口對外暴漏,使用如下命令:
//添加端口sudo firewall-cmd --zone=public --add-port=2375/tcp --permanent
//重載防火墻
sudo firewall-cmd --reload
看到sucess字樣後,再使用iptables-save命令查看端口,可以看到,對外放開的端口增加了2375端口。
這次重新打包,發布成功。
使用命令:
docker images
查看到新打包的鏡像,註意172.27.73.xx:5000開頭的REPOSITORY列,已添加。
使用dockerfile-maven-plugin發布docker到私有倉庫