1. 程式人生 > >使用dockerfile-maven-plugin發布docker到私有倉庫

使用dockerfile-maven-plugin發布docker到私有倉庫

pac mon onf gist spring conn nec tle lis

要想擁有私有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到私有倉庫