简体   繁体   中英

Running "ng build" in docker container gives "project definition could not be found"

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM