#node.js #docker #docker-compose
Вопрос:
Когда я запускаю свой файл dockerfile с docker build
помощью and docker run
, он отлично работает. Но когда я создаю docker-compose.yml
файл для подключения MongoDB, я получил ошибку.
ОШИБКА: failed to solve: rpc error: code = Unknown desc = failed to compute cache key: failed to walk /var/lib/docker/tmp/buildkit-mount285447202/backend: lstat /var/lib/docker/tmp/buildkit-mount285447202/backend: no such file or directory
.
Вот мой докер-составьте код:
version: "3"
services:
backend:
build:
context: ./docker
dockerfile: Dockerfile.backend
container_name: backend
ports:
- '8081:8081'
links:
- mongodb
mongodb:
container_name: mongodb
image: mongo
ports:
- '27017:27017'
Вот мой код файла докера:
FROM node:14-alpine AS builder
WORKDIR /app
COPY backend/package.json backend/package-lock.json ./
RUN npm install
COPY backend/src/ ./src
COPY backend/.env ./
COPY backend/.babelrc ./
RUN mkdir -p build/src
RUN npm run build
FROM node:alpine AS runner
WORKDIR /app
RUN apk add --no-cache
chromium
nss
freetype
harfbuzz
ca-certificates
ttf-freefont
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
RUN npm install puppeteer@10.0.0
RUN addgroup -S pptruser amp;amp; adduser -S -g pptruser pptruser
amp;amp; mkdir -p /home/pptruser/Downloads /app
amp;amp; chown -R pptruser:pptruser /home/pptruser
amp;amp; chown -R pptruser:pptruser /app
# USER pptruser
USER root
COPY --from=builder /app/package.json ./
COPY --from=builder /app/package-lock.json ./
COPY --from=builder /app/.env ./
COPY --from=builder /app/build ./build
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 8081
CMD ["node", "build/src/index.js"]
Я получил ОШИБКУ в:
=> ERROR [builder 3/9] COPY backend/package.json backend/package-lock.json ./ 0.0s
=> CACHED [builder 4/9] RUN npm install 0.0s
=> ERROR [builder 5/9] COPY backend/src/ ./src 0.0s
=> ERROR [builder 6/9] COPY backend/.env ./ 0.0s
=> ERROR [builder 7/9] COPY backend/.babelrc ./ 0.0s
Мой каталог:
|-docker-compose.yml
|-backend
| |-src
| |-package.json
| |-package-lock.json
| |-build
| |-...
|-docker
| |-Dockerfile.backend
| |-Dockerfile.frontend
|....
Ответ №1:
Обычно это происходит, когда Dockerfile
не удается найти папку, например
Докерфайл:
FROM alpine:3.8
COPY backend /tmp
Исполнение:
$ docker build .
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM alpine:3.8
---> c8bccc0af957
Step 2/2 : COPY backend /tmp
COPY failed: stat /var/lib/docker/tmp/docker-builder736780062/backend: no such file or directory
Убедитесь context
, что в папке(вот ваша docker
) есть backend
папка.
Для вас правильным способом должно быть:
version: "3"
services:
backend:
build:
context: .
dockerfile: docker/Dockerfile.backend