I am working on a Next.js project with a PostgreSQL database running in a Docker container. My project's setup uses Docker Compose. However, when I run docker-pose up, it takes forever to execute the npm install mand. Running npm install locally on my development machine finishes in less than a minute.
In the attached log, you can see that when I run npm i with the log level set to verbose, it appears to hang with no progress after a certain point.
[+] Building 3624.4s (7/8)
=> => transferring context: 34B 0.0s
=> [internal] load metadata for docker.io/library/node:latest 1.5s
=> [internal] load build context 0.1s
=> => transferring context: 906.47kB 0.1s
=> [1/4] FROM docker.io/library/node@sha256:xxx 0.0s
=> CACHED [2/4] WORKDIR /app 0.0s
=> [3/4] COPY . . 0.3s
=> [4/4] RUN npm install --loglevel verbose 2065.1s
=> => # npm http fetch GET 200 /@types/eslint/-/eslint-8.4.10.tgz 137294ms attempt #3 (cache miss)
=> => # npm http fetch GET 200 /@types/babel__generator/-/babel__generator-7.6.6.tgz 137326ms attempt #3 (cache miss)
=> => # npm http fetch GET 200 /@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz 137403ms attempt #3 (cache miss)
=> => # npm http fetch GET 200 /@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz 137436ms attempt #3 (cache miss)
=> => # npm http fetch GET 200 /@types/node/-/node-20.4.1.tgz 137633ms attempt #3 (cache miss)
=> => # npm http fetch GET 200 /@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz 137706ms attempt #3 (cache miss)
This is my docker-pose setup:
FROM node
WORKDIR /app
COPY . .
RUN npm install --loglevel verbose
ENV PORT=5000
EXPOSE 5000
ENTRYPOINT ["npm", "start"]
If the information is unclear please let me know.
I am working on a Next.js project with a PostgreSQL database running in a Docker container. My project's setup uses Docker Compose. However, when I run docker-pose up, it takes forever to execute the npm install mand. Running npm install locally on my development machine finishes in less than a minute.
In the attached log, you can see that when I run npm i with the log level set to verbose, it appears to hang with no progress after a certain point.
[+] Building 3624.4s (7/8)
=> => transferring context: 34B 0.0s
=> [internal] load metadata for docker.io/library/node:latest 1.5s
=> [internal] load build context 0.1s
=> => transferring context: 906.47kB 0.1s
=> [1/4] FROM docker.io/library/node@sha256:xxx 0.0s
=> CACHED [2/4] WORKDIR /app 0.0s
=> [3/4] COPY . . 0.3s
=> [4/4] RUN npm install --loglevel verbose 2065.1s
=> => # npm http fetch GET 200 https://registry.npmjs/@types/eslint/-/eslint-8.4.10.tgz 137294ms attempt #3 (cache miss)
=> => # npm http fetch GET 200 https://registry.npmjs/@types/babel__generator/-/babel__generator-7.6.6.tgz 137326ms attempt #3 (cache miss)
=> => # npm http fetch GET 200 https://registry.npmjs/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz 137403ms attempt #3 (cache miss)
=> => # npm http fetch GET 200 https://registry.npmjs/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz 137436ms attempt #3 (cache miss)
=> => # npm http fetch GET 200 https://registry.npmjs/@types/node/-/node-20.4.1.tgz 137633ms attempt #3 (cache miss)
=> => # npm http fetch GET 200 https://registry.npmjs/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz 137706ms attempt #3 (cache miss)
This is my docker-pose setup:
FROM node
WORKDIR /app
COPY . .
RUN npm install --loglevel verbose
ENV PORT=5000
EXPOSE 5000
ENTRYPOINT ["npm", "start"]
If the information is unclear please let me know.
Share Improve this question edited Oct 24, 2023 at 18:34 Specht asked Oct 24, 2023 at 18:14 SpechtSpecht 1423 silver badges13 bronze badges 03 Answers
Reset to default 3Just copy package-lock.json to the container too.
COPY package.json package-lock.json ./
This line fixed my issue. Nothing else worked (reinstalled VMs countless times, DNS, IPv6).
It's because you aren't taking advantage of Docker caching. Try adding the below to your Dockerfile as detailed here.
COPY package.json /app
RUN npm install
I changed my Dockerfile as suggested by @KyleBachan to this:
FROM node
WORKDIR /app
EXPOSE 5000
CMD ["npm", "start"]
COPY package.json /app
RUN npm install
COPY . /app