Docker Build Error RUN cp .env && yarn && yarn generate - docker

I failed to execute docker built -t "my_image_namev0.1" .
With Error Massage : ERROR [build 4/4] RUN cp .env && yarn && yarn generate
Here is my Dockerfile script :
# Stage 1: Build
FROM node:16-alpine as build
WORKDIR /app
COPY . .
RUN cp .env && yarn && yarn generate
# Stage 2: Serve
FROM nginx:stable-alpine
COPY --from=build /app/dist /usr/share/nginx/html/mdp
COPY --from=build /app/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
I know the error because of the yarn failed to run from the docker.
I have tried to remove all the node_modules and insall it again but still facing the same error.
Maybe someone have this similar problem before, and I really need your help..
Thank you

Related

How to create a Dockerfile for Nextjs and graphql?

I tried to deploy my Nextjs project to Heroku via Docker, so i follow docs on internet,then i get a Dockerfile like this
# Install dependencies only when needed
FROM node:alpine AS deps
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
RUN apk add --no-cache libc6-compat
WORKDIR /app
# COPY package.json yarn.lock ./
COPY package.json package-lock.json ./
# RUN yarn install --frozen-lockfile
RUN npm ci
# Rebuild the source code only when needed
FROM node:alpine AS builder
WORKDIR /app
COPY . .
COPY --from=deps /app/node_modules ./node_modules
# RUN yarn build && yarn install --production --ignore-scripts --prefer-offline
RUN npm run build && npm install --production --ignore-scripts --prefer-offline
# Production image, copy all the files and run next
FROM node:alpine AS runner
WORKDIR /app
ENV NODE_ENV production
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001
# You only need to copy next.config.js if you are NOT using the default configuration
# COPY --from=builder /app/next.config.js ./
COPY --from=builder /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next ./.next
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./package.json
USER nextjs
EXPOSE 3000
# Next.js collects completely anonymous telemetry data about general usage.
# Learn more here: https://nextjs.org/telemetry
# Uncomment the following line in case you want to disable telemetry.
ENV NEXT_TELEMETRY_DISABLED 1
# CMD ["yarn", "start"]
CMD ["npm", "run", "start"]
and .dockerignore
node_modules
.next
But i get this error when building
ERROR [runner 5/8] COPY --from=builder /app/public ./public
I think this error right because i don't see public folder in my project, maybe my project missing it
Then i go to learn basic about docker, i dont know so much , but i can create a simple Dockerfile like this
FROM node
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json ./
RUN npm install
COPY . .
# RUN npm run build
# ENV NODE_ENV=production
EXPOSE 3000
USER node
CMD [ "npm","run","dev"]
with .dockerignore above,I test it with dev enviroment, if it can run I'll edit to production, I run my project by command
docker run -it -p 3000:3000 --name run-my-client my-client
But i get this error
[Error: EACCES: permission denied, unlink '/usr/src/app/.next/build-manifest.json'] {
errno: -13,
code: 'EACCES',
syscall: 'unlink',
path: '/usr/src/app/.next/build-manifest.json'
}
I still see build-manifest.json file in .next folder, but i don't know why this error is appear.Am i missing something and How can i fix it?

docker buildx not copying files when in production

I am having an issue where the docker buildx tool doesn't properly copy files to the production container. For example:
FROM --platform=$BUILDPLATFORM node:16.14.0-alpine as build
WORKDIR /app
ENV PATH /app/node_modules/.bin:$PATH
COPY package.json ./
COPY yarn.lock ./
RUN apk update && apk add python3 g++ make && rm -rf /var/cache/apk/*
RUN yarn install
COPY . ./
RUN yarn run build
# production environment
FROM nginx:stable-alpine
COPY --from=build /app/build /usr/share/nginx/html/
COPY ./nginx/nginx.conf /etc/nginx/conf.d/default.conf
# Default port exposure
EXPOSE 80
# Copy .env file and shell script to container
COPY ./env.sh /usr/share/nginx/html/env.sh
# Start Nginx server
CMD ["/bin/sh", "-c", "/usr/share/nginx/html/env.sh && nginx -g \"daemon off;\""]
All of the files from build will copy properly. However, the nginx.conf and env.sh will report as not found. Any ideas?
P.S: This seems to be an issue with nginx:alpine. No clue

Environment variable not picking up in dockerfile

I have a Vue application which I serve with docker, currently I want to use environment variables to target specific project repo. But when I am setting env variables, it's not picking up in dockerfile,
What am I doing wrong in my setup ?
NPM scripts.
scripts: {
"build:project1": "vue-cli-service build src/project1/main.js",
"deploy:project1": "cross-env PROJECT_REPO=project1 bash build_deploy.sh"
}
build_deploy.sh
#!/bin/bash
docker build -t ${PROJECT_REPO} .
Dockerfile
# build stage
FROM node:lts-alpine as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build:${PROJECT_REPO}
# production stage
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Aha. Found it. I was missing ARG in docker file
# build stage
ARG PROJECT_REPO
FROM node:lts-alpine as build-stage
ARG PROJECT_REPO
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build:${PROJECT_REPO}
# production stage
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Reference taken from docs: https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact

Dockerfile with nginx and SSR in staging environment

i am having issues with running my mean stack application in staging environment. View page source still only has empty tags. It is working great in dev environment (probably because im not using docker in dev environment).
Here is my dockerfile:
#################
# Build the app #
#################
FROM node:14.5-alpine as build
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm install
COPY . .
RUN npm install -g #angular/cli
RUN ng build --configuration=staging && ng run bananas:server:staging
################
# Run in NGINX #
################
FROM nginx:alpine
COPY --from=build /app/dist/bananas/browser /usr/share/nginx/html
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx/nginx.conf /etc/nginx/conf.d
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

Yarn test with docker inside github actions does not finish ever

I've a react app that is build with docker. And now I've tests on it, but the step yarn test never finish inside a github action.
This is my dockerfile:
FROM node:alpine as build
WORKDIR /app
RUN apk update && apk add jq
COPY . /app
ENV PATH /app/node_modules/.bin:$PATH
RUN yarn --silent
RUN yarn lint
RUN yarn test
RUN yarn build
FROM nginx:alpine as nginx
RUN apk add --no-cache certbot
COPY nginx/renew /etc/periodic/daily/renew
RUN chmod +x /etc/periodic/daily/renew
RUN mkdir /var/lib/certbot
VOLUME /var/log/nginx
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx/nginx.conf /etc/nginx/conf.d
COPY --from=build /app/build /usr/share/nginx/html
EXPOSE 80
EXPOSE 443
WORKDIR /usr/share/nginx/html
COPY ./env.sh .
COPY .env .
RUN apk add --no-cache bash
RUN chmod +x env.sh
CMD ["/bin/bash", "-c", "/usr/share/nginx/html/env.sh && nginx -g \"daemon off;\""]
Before add the line run yarn test everuthing works fine running the build in gh action, but after this is what appears:
Test Suites: 3 passed, 3 total
Tests: 10 passed, 10 total
Snapshots: 1 passed, 1 total
Time: 15.335s
Ran all test suites.
Error: The operation was canceled.
And gets there for almost 6 hours and the github stops the job by himself.
Any idea?

Resources