昨晚看springboot視頻的時候,發現可使用docker-maven-plugin這個插件直接build出 docker 鏡像到遠程服務器上,感受很方便,因而本身也試了一下,可是碰到了幾個問題,記錄一下。java
視頻中使用的是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 通了。
按照視頻中的寫法
在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-_.]
沒仔細看,,浪費一個小時。。