我有以下春季启动项目结构:
pwd
/Users/eugene/Documents/Dev/Java/workspace/Springboot-Receiver-API
tree
.
├── Dockerfile
├── pom.xml
├── src
│ └── main
│ ├── java
│ │ └── com
│ │ └── myconpany
│ │ └── myproject
│ │ └── data
│ │ ├── Application.java
│ │ ├── ConsumerThreadPool.java
│ │ ├── ErpConsumer.java
│ │ ├── configs
│ │ │ ├── ConsumerConfigFactory.java
│ │ │ └── DatabaseConfig.java
│ │ ├── controllers
│ │ │ ├── AppBeans.java
│ │ │ ├── BankcustpaymidtableController.java
│ │ │ ├── CompanynafcodeController.java
│ │ │ ├── CustcollectionscontactController.java
│ │ │ ├── CustdirectdebitmandateController.java
│ │ │ ├── CusttableController.java
│ │ │ ├── CusttradingpartnercodeController.java
│ │ │ ├── DirnameaffixController.java
│ │ │ ├── DirnamesequenceController.java
│ │ │ ├── DirorganizationnameController.java
│ │ │ ├── DirpartylocationController.java
│ │ │ ├── DirpartytableController.java
│ │ │ ├── DirpersonnameController.java
│ │ │ ├── DirpersonuserController.java
│ │ │ ├── HcmworkerController.java
│ │ │ ├── LogisticselectronicaddressController.java
│ │ │ ├── LogisticspostaladdressController.java
│ │ │ ├── LvpaymtranscodesController.java
│ │ │ ├── MainController.java
│ │ │ ├── McrcusttableController.java
│ │ │ ├── McrmessageassociationCOntroller.java
│ │ │ ├── RetailcusttableController.java
│ │ │ ├── SpringBootKafkaProducer.java
│ │ │ ├── Taxgstreliefgroupheading_myController.java
│ │ │ ├── Taxinformationcusttable_inController.java
│ │ │ └── WhscusttableController.java
│ │ └── models
│ │ ├── Bankcustpaymidtable.java
│ │ ├── BankcustpaymidtableCompositeKey.java
│ │ ├── BankcustpaymidtableDao.java
│ │ ├── Companynafcode.java
│ │ ├── CompanynafcodeCompositeKey.java
│ │ ├── CompanynafcodeDao.java
│ │ ├── Custcollectionscontact.java
│ │ ├── CustcollectionscontactCompositeKey.java
│ │ ├── CustcollectionscontactDao.java
│ │ ├── Custdirectdebitmandate.java
│ │ ├── CustdirectdebitmandateCompositeKey.java
│ │ ├── CustdirectdebitmandateDao.java
│ │ ├── Custtable.java
│ │ ├── CusttableCompositeKey.java
│ │ ├── CusttableDao.java
│ │ ├── Custtradingpartnercode.java
│ │ ├── CusttradingpartnercodeCompositeKey.java
│ │ ├── CusttradingpartnercodeDao.java
│ │ ├── Dirnameaffix.java
│ │ ├── DirnameaffixCompositeKey.java
│ │ ├── DirnameaffixDao.java
│ │ ├── Dirnamesequence.java
│ │ ├── DirnamesequenceCompositeKey.java
│ │ ├── DirnamesequenceDao.java
│ │ ├── Dirorganizationname.java
│ │ ├── DirorganizationnameCompositeKey.java
│ │ ├── DirorganizationnameDao.java
│ │ ├── Dirpartylocation.java
│ │ ├── DirpartylocationCompositeKey.java
│ │ ├── DirpartylocationDao.java
│ │ ├── Dirpartytable.java
│ │ ├── DirpartytableCompositeKey.java
│ │ ├── DirpartytableDao.java
│ │ ├── Dirpersonname.java
│ │ ├── DirpersonnameCompositeKey.java
│ │ ├── DirpersonnameDao.java
│ │ ├── Dirpersonuser.java
│ │ ├── DirpersonuserCompositeKey.java
│ │ ├── DirpersonuserDao.java
│ │ ├── Hcmworker.java
│ │ ├── HcmworkerCompositeKey.java
│ │ ├── HcmworkerDao.java
│ │ ├── Logisticselectronicaddress.java
│ │ ├── LogisticselectronicaddressCompositeKey.java
│ │ ├── LogisticselectronicaddressDao.java
│ │ ├── Logisticspostaladdress.java
│ │ ├── LogisticspostaladdressCompositeKey.java
│ │ ├── LogisticspostaladdressDao.java
│ │ ├── Lvpaymtranscodes.java
│ │ ├── LvpaymtranscodesCompositeKey.java
│ │ ├── LvpaymtranscodesDao.java
│ │ ├── Mcrcusttable.java
│ │ ├── McrcusttableCompositeKey.java
│ │ ├── McrcusttableDao.java
│ │ ├── Mcrmessageassociation.java
│ │ ├── McrmessageassociationCompositeKey.java
│ │ ├── McrmessageassociationDao.java
│ │ ├── Retailcusttable.java
│ │ ├── RetailcusttableCompositeKey.java
│ │ ├── RetailcusttableDao.java
│ │ ├── Taxgstreliefgroupheading_my.java
│ │ ├── Taxgstreliefgroupheading_myCompositeKey.java
│ │ ├── Taxgstreliefgroupheading_myDao.java
│ │ ├── Taxinformationcusttable_in.java
│ │ ├── Taxinformationcusttable_inCompositeKey.java
│ │ ├── Taxinformationcusttable_inDao.java
│ │ ├── Whscusttable.java
│ │ ├── WhscusttableCompositeKey.java
│ │ └── WhscusttableDao.java
│ └── resources
│ └── application.properties
└── target
├── Spring-Boot-ReceiverAPI-0.0.1-SNAPSHOT.jar
├── Spring-Boot-ReceiverAPI-0.0.1-SNAPSHOT.jar.original
├── classes
│ ├── META-INF
│ │ ├── MANIFEST.MF
│ │ └── maven
│ │ ├── netgloo
│ │ │ └── spring-boot-mysql-jpa-hibernate
│ │ │ ├── pom.properties
│ │ │ └── pom.xml
│ │ └── myconpany
│ │ └── Spring-Boot-ReceiverAPI
│ │ ├── pom.properties
│ │ └── pom.xml
│ ├── application.properties
│ └── com
│ └── myconpany
│ └── myproject
│ └── data
│ ├── Application.class
│ ├── ConsumerThreadPool.class
│ ├── ErpConsumer$1.class
│ ├── ErpConsumer$10.class
│ ├── ErpConsumer$11.class
│ ├── ErpConsumer$2.class
│ ├── ErpConsumer$3.class
│ ├── ErpConsumer$4.class
│ ├── ErpConsumer$5.class
│ ├── ErpConsumer$6.class
│ ├── ErpConsumer$7.class
│ ├── ErpConsumer$8.class
│ ├── ErpConsumer$9.class
│ ├── ErpConsumer.class
│ ├── configs
│ │ ├── ConsumerConfigFactory.class
│ │ └── DatabaseConfig.class
│ ├── controllers
│ │ ├── AppBeans.class
│ │ ├── BankcustpaymidtableController$1.class
│ │ ├── BankcustpaymidtableController.class
│ │ ├── CompanynafcodeController$1.class
│ │ ├── CompanynafcodeController.class
│ │ ├── CustcollectionscontactController$1.class
│ │ ├── CustcollectionscontactController.class
│ │ ├── CustdirectdebitmandateController$1.class
│ │ ├── CustdirectdebitmandateController.class
│ │ ├── CusttableController.class
│ │ ├── CusttradingpartnercodeController$1.class
│ │ ├── CusttradingpartnercodeController.class
│ │ ├── DirnameaffixController$1.class
│ │ ├── DirnameaffixController.class
│ │ ├── DirnamesequenceController$1.class
│ │ ├── DirnamesequenceController.class
│ │ ├── DirorganizationnameController$1.class
│ │ ├── DirorganizationnameController.class
│ │ ├── DirpartylocationController$1.class
│ │ ├── DirpartylocationController.class
│ │ ├── DirpartytableController$1.class
│ │ ├── DirpartytableController.class
│ │ ├── DirpersonnameController$1.class
│ │ ├── DirpersonnameController.class
│ │ ├── DirpersonuserController$1.class
│ │ ├── DirpersonuserController.class
│ │ ├── HcmworkerController.class
│ │ ├── LogisticselectronicaddressController$1.class
│ │ ├── LogisticselectronicaddressController.class
│ │ ├── LogisticspostaladdressController$1.class
│ │ ├── LogisticspostaladdressController.class
│ │ ├── LvpaymtranscodesController$1.class
│ │ ├── LvpaymtranscodesController.class
│ │ ├── MainController.class
│ │ ├── McrcusttableController$1.class
│ │ ├── McrcusttableController.class
│ │ ├── McrmessageassociationCOntroller$1.class
│ │ ├── McrmessageassociationCOntroller.class
│ │ ├── RetailcusttableController$1.class
│ │ ├── RetailcusttableController.class
│ │ ├── SpringBootKafkaProducer.class
│ │ ├── Taxgstreliefgroupheading_myController$1.class
│ │ ├── Taxgstreliefgroupheading_myController.class
│ │ ├── Taxinformationcusttable_inController$1.class
│ │ ├── Taxinformationcusttable_inController.class
│ │ ├── WhscusttableController$1.class
│ │ └── WhscusttableController.class
│ └── models
│ ├── Bankcustpaymidtable.class
│ ├── BankcustpaymidtableCompositeKey.class
│ ├── BankcustpaymidtableDao.class
│ ├── Companynafcode.class
│ ├── CompanynafcodeCompositeKey.class
│ ├── CompanynafcodeDao.class
│ ├── Custcollectionscontact.class
│ ├── CustcollectionscontactCompositeKey.class
│ ├── CustcollectionscontactDao.class
│ ├── Custdirectdebitmandate.class
│ ├── CustdirectdebitmandateCompositeKey.class
│ ├── CustdirectdebitmandateDao.class
│ ├── Custtable.class
│ ├── CusttableCompositeKey.class
│ ├── CusttableDao.class
│ ├── Custtradingpartnercode.class
│ ├── CusttradingpartnercodeCompositeKey.class
│ ├── CusttradingpartnercodeDao.class
│ ├── Dirnameaffix.class
│ ├── DirnameaffixCompositeKey.class
│ ├── DirnameaffixDao.class
│ ├── Dirnamesequence.class
│ ├── DirnamesequenceCompositeKey.class
│ ├── DirnamesequenceDao.class
│ ├── Dirorganizationname.class
│ ├── DirorganizationnameCompositeKey.class
│ ├── DirorganizationnameDao.class
│ ├── Dirpartylocation.class
│ ├── DirpartylocationCompositeKey.class
│ ├── DirpartylocationDao.class
│ ├── Dirpartytable.class
│ ├── DirpartytableCompositeKey.class
│ ├── DirpartytableDao.class
│ ├── Dirpersonname.class
│ ├── DirpersonnameCompositeKey.class
│ ├── DirpersonnameDao.class
│ ├── Dirpersonuser.class
│ ├── DirpersonuserCompositeKey.class
│ ├── DirpersonuserDao.class
│ ├── Hcmworker.class
│ ├── HcmworkerCompositeKey.class
│ ├── HcmworkerDao.class
│ ├── Logisticselectronicaddress.class
│ ├── LogisticselectronicaddressCompositeKey.class
│ ├── LogisticselectronicaddressDao.class
│ ├── Logisticspostaladdress.class
│ ├── LogisticspostaladdressCompositeKey.class
│ ├── LogisticspostaladdressDao.class
│ ├── Lvpaymtranscodes.class
│ ├── LvpaymtranscodesCompositeKey.class
│ ├── LvpaymtranscodesDao.class
│ ├── Mcrcusttable.class
│ ├── McrcusttableCompositeKey.class
│ ├── McrcusttableDao.class
│ ├── Mcrmessageassociation.class
│ ├── McrmessageassociationCompositeKey.class
│ ├── McrmessageassociationDao.class
│ ├── Retailcusttable.class
│ ├── RetailcusttableCompositeKey.class
│ ├── RetailcusttableDao.class
│ ├── Taxgstreliefgroupheading_my.class
│ ├── Taxgstreliefgroupheading_myCompositeKey.class
│ ├── Taxgstreliefgroupheading_myDao.class
│ ├── Taxinformationcusttable_in.class
│ ├── Taxinformationcusttable_inCompositeKey.class
│ ├── Taxinformationcusttable_inDao.class
│ ├── Whscusttable.class
│ ├── WhscusttableCompositeKey.class
│ └── WhscusttableDao.class
├── generated-sources
│ └── annotations
├── maven-archiver
│ └── pom.properties
├── maven-status
│ └── maven-compiler-plugin
│ └── compile
│ └── default-compile
│ ├── createdFiles.lst
│ └── inputFiles.lst
└── test-classes
我的Dockerfile如下所示:
FROM java:8
ADD target/Spring-Boot-ReceiverAPI-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
从项目根目录(/Users/eugene/Documents/Dev/Java/workspace/Springboot-Receiver-API)
运行以下命令来构建docker镜像:
sudo docker build - < Dockerfile
我得到以下输出:
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM java:8
---> 96cddf5ae9f1
Step 2 : ADD target/Spring-Boot-ReceiverAPI-0.0.1-SNAPSHOT.jar app.jar
lstat target/Spring-Boot-ReceiverAPI-0.0.1-SNAPSHOT.jar: no such file or directory
在同一目录中,当我运行ls target/Spring-Boot-ReceiverAPI-0.0.1-SNAPSHOT.jar
时,我得到:
target/Spring-Boot-ReceiverAPI-0.0.1-SNAPSHOT.jar
为了让docker build能够识别我的target/Spring-Boot-ReceiverAPI-0.0.1-SNAPSHOT.jar
文件,我做了什么?
答案 0 :(得分:1)
AFAIK您可以使用maven-resources-plugin来确保Dockerfile位于适当的位置(然后您甚至可以将jar文件的名称作为变量放入Dockerfile中):
<build>
<resources>
<resource>
<directory>${basedir}/src/main/docker</directory>
<filtering>true</filtering>
<includes>
<include>Dockerfile</include>
</includes>
</resource>
</resources>
</build>
或者,更好的是,您按照此处所述的maven-docker-plugin进行操作: https://spring.io/guides/gs/spring-boot-docker/
希望有所帮助!
答案 1 :(得分:0)
您可以使用Spotify中的dockerfile-maven-plugin
简化事情。
默认情况下,该插件在Maven项目的基本目录中寻找Dockerfile
。
您可以使用它,例如:
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<repository>${project.groupId}/${project.artifactId}</repository>
<tag>latest</tag>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>
此示例使用latest
作为标记版本创建图像。
您还可以指定一个特定的版本,例如pom的版本:
<tag>${project.version}</tag>
要从先前执行过的mvn package
来构建图像,请执行以下操作:
mvn dockerfile:build
要在构建映像之前打包应用程序:
mvn clean package dockerfile:build