I'm trying to build an Angular + Spring-boot project using Maven and deploy it as a docker container. To compile the application I run
mvn package
which at some point runs ng build
. It works as intended when I do it on my local machine. But when I copy files into a docker image and try to run mvn package
, I get an error
[INFO] --- frontend-maven-plugin:1.11.2:npm (npm-build) @ tradingSandbox ---
[INFO] Running 'npm run-script build' in /
[INFO]
[INFO] > trading-sandbox@0.0.0 build /
[INFO] > ng build
[INFO]
[INFO] The build command requires to be run in an Angular project, but a project definition could not be found.
[INFO] npm ERR! code ELIFECYCLE
[INFO] npm ERR! errno 1
[INFO] npm ERR! trading-sandbox@0.0.0 build: `ng build`
[INFO] npm ERR! Exit status 1
[INFO] npm ERR!
[INFO] npm ERR! Failed at the trading-sandbox@0.0.0 build script.
[INFO] npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
[INFO]
[INFO] npm ERR! A complete log of this run can be found in:
[INFO] npm ERR! /root/.npm/_logs/2021-02-23T09_15_24_641Z-debug.log
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
The root directory contains proper angular.json
file and Maven downloads correct version of nodejs. Because it is inside a docker image, I am unable to access debug.log
. Needless to say I am unexperienced with using a Docker.
Dockerfile
FROM maven:3.6.3-jdk-11
COPY . /
RUN cd /
RUN ls -a
ENV PORT=8080
RUN mvn package
CMD mvn spring-boot:run -Dspring-boot.run.profiles=$PROFILE -Dserver.port=$PORT
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>tradingSandbox</artifactId>
<version>0.0.1</version>
<name>tradingSandbox</name>
<description>Trading sandbox</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- Database controller for deployment -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Database controller for testing -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.10.7</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.10.7</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.10.7</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<version>1.11.2</version>
<configuration>
<nodeVersion>v12.18.4</nodeVersion>
</configuration>
<executions>
<execution>
<id>install-npm</id>
<goals>
<goal>install-node-and-npm</goal>
</goals>
</execution>
<execution>
<id>npm-install</id>
<goals>
<goal>npm</goal>
</goals>
</execution>
<execution>
<id>npm-build</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>run-script build</arguments>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
You are in the wrong directory. It can not find the angular.json
file.
remove
RUN cd /
from your dockerfile.
Make sure that RUN ls -a
returns the directory which holds angular.json
, and if it doesn't, configure RUN cd blabla
correctly.
Got the same issue today. Even though RUN ls -la
gave me the correct directory, setting an explicit WORKDIR
fixed it for me
WORKDIR /var/www
I put this as the second line in my Dockerfile after the FROM...
line. The directory shouldn't matter as WORKDIR
creates it if it doesn't exist.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.