'Building angular image with dockerfile

I'm creating example app.

My first question is do I need to use nginx(for building docker image) since my reverse proxy on docker will be traefik?

Image built with nginx have only 23 mb but without 170mb.

Example dockerfile with nginx:

### STAGE 1: Build ###
FROM node:17.6-alpine AS builder

WORKDIR /usr/src/app

COPY package.json package-lock.json ./

RUN npm cache clean --force

RUN npm install

COPY . .

RUN npm run build --prod

FROM nginx:1.21.6-alpine

COPY --from=builder /usr/src/app/dist/content-admin-frontend /usr/share/nginx/html

COPY nginx.conf /etc/nginx/nginx.conf

EXPOSE 80

nginx.conf file(minimal im using traefik on docker):

events {}
http {  
 server {  
    listen 80; 
  }
}

but after start a container and go on localhost:4200 (mapping port to 4200 in docker) I'm getting:

/docker-entrypoint.sh: Configuration complete; ready for start up

172.17.0.1 - - [08/Mar/2022:02:32:45 +0000] "GET / HTTP/1.1" 404 153 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0"

2022/03/08 02:32:45 [error] 32#32: *1 "/etc/nginx/html/index.html" is not found (2: No such file or directory), client: 172.17.0.1, server: , request: "GET / HTTP/1.1", host: "localhost:4200"

172.17.0.1 - - [08/Mar/2022:02:32:45 +0000] "GET /favicon.ico HTTP/1.1" 404 153 "http://localhost:4200/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0"

2022/03/08 02:32:45 [error] 32#32: *1 open() "/etc/nginx/html/favicon.ico" failed (2: No such file or directory), client: 172.17.0.1, server: , request: "GET /favicon.ico HTTP/1.1", host: "localhost:4200", referrer: "http://localhost:4200/"

I think problem is here "/etc/nginx/html/index.html" is not found. Someone know why it's happened?



Solution 1:[1]

In your Dockerfile, you copy your Angular App to /usr/share/nginx/html. But Nginx tries to load everything from /etc/nginx/html.

So you can either change

COPY --from=builder /usr/src/app/dist/content-admin-frontend /usr/share/nginx/html

to

COPY --from=builder /usr/src/app/dist/content-admin-frontend /etc/nginx/html

or modify your nginx.conf to

events {}
http {  
 server {  
    listen 80;
    location / {
        root /usr/share/nginx/html;
        index index.html;
    } 
  }
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Motscha