maven docker 插件集成的幾個小坑

昨晚看springboot視頻的時候,發現可使用docker-maven-plugin這個插件直接build出 docker 鏡像到遠程服務器上,感受很方便,因而本身也試了一下,可是碰到了幾個問題,記錄一下。java

1、開啓docker遠程端口

視頻中使用的是centos,然而我是Ubuntu。好吧,其實沒啥區別,可是仍是有一點小區別的,,好比文件位置不一樣。git

Ubuntu下須要編輯的文件爲github

vim /etc/default/docker

在最後一行加上spring

DOCKER_OPTS="-H unix:///var/run/docker.sock -H tcp://0.0.0.0:6732"

好,咱們把端口設置爲了6732,視頻中就講了這個,多是系統緣由,此時我本地用 Telnet 訪問這個端口是不通的。docker

咱們還須要apache

vim /lib/systemd/system/docker.service

增長一行vim

EnvironmentFile=-/etc/default/docker

指定使用咱們剛纔編輯的文件centos

而後修改springboot

ExecStart=/usr/bin/dockerd -H fd://

服務器

ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS

其實就是指定使用咱們剛纔編輯的參數

好了,此時Telnet 通了。

2、配置pom文件

按照視頻中的寫法

在properties中增長一行指定遠程主機的位置,端口爲咱們剛纔配置的6732

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <dockerHost>http://x.x.x.x:6732</dockerHost>
    </properties>

而後增長一個plugin

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>1.0.0</version>
    <configuration>     
        <!--  imageName>mavenTest</imageName>  -->                  
        <imageName>java</imageName>
        <baseImage>java</baseImage>
        <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
        <resources>
            <resource>
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>
                <include>${project.build.finalName}.jar</include>
            </resource>
        </resources>
    </configuration>
</plugin>

而後咱們執行 mvn -DskipTests clean package docker:build
好,build成功。

問題來了,按照這樣寫是沒問題的。

可是我忽然想到怎麼指定我build出來的image名稱呢。而後我就把imageName改成了mavenTest

而後就報錯了。。。

[ERROR] Failed to execute goal com.spotify:docker-maven-plugin:0.4.3:build (default-cli) on project mavenTest: Exception caught: java.util.concurrent.ExecutionException: com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: org.apache.http.client.ClientProtocolException: Cannot retry request with a non-repeatable request entity: Connection reset by peer -> [Help 1]

看這個錯一臉懵逼,連接出錯???剛還不是好的嗎。又把名字換成java,又能夠了。。因而百度了一下,有的說升級版本成0.4.4就能夠了,有的說升級成1.0.0能夠,然而,並無什麼用。

百度提供的有效信息就這麼多了,,

因而去 GitHub上看了下,終於在 issues 中發現這樣一個問題,

User could be warned if an illegal image name is specified

I have struggled for some time now with a strange problem, where mvn docker:build failed; amongst the error output, "Connection Reset" was found. I finally figured out what caused the issue: My maven project's artifact ID had upper-case letters in it, and I am using ${myPrefix}/${project.artifactId} as the image name. However, docker seems to not allow upper-case letters for images names.

看起來是我同樣的問題,他說他的項目名中有大寫字母,,,,,看到這裏,恍然大悟,把imageName 改爲 ttt 試了下,果真能夠。。

最後想說一下,,其實這個錯誤是不該該犯得,由於視頻中講了image的命名規範

only [a-z0-9-_.]

沒仔細看,,浪費一個小時。。

相關文章
相關標籤/搜索