如何正确构build使用Dockerfile的弹簧启动泊坞窗图像?
我有以下的spring启动项目结构:
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)
运行以下命令来构build一个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
文件,需要做些什么?
AFAIK你可以使用maven-resources-plugin来确保Dockerfile在适当的位置(然后你甚至可以把jar文件的名字作为variables放到你的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/
希望有所帮助!