0

我正在从 Django 中提供一个 react 应用程序,并尝试使用docker-compose up -d --build.

我的项目目录如下:

root
├──project (django)
| ├──frontend/ # react project is here
| ├──project/
| ├──static/
| ├──Dockerfile         //Dockerfile for backend image
| ├──entrypoint.sh
| ├──manage.py
| ├──requirements.txt
└──docker-compose.yaml 

这是我当前的部署脚本:

# pull the official base image
FROM python:3.8.12-bullseye

# set work directory
WORKDIR /usr/src/app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install dependencies
RUN apt-get update
COPY /requirements.txt /usr/src/app
RUN pip install -r requirements.txt

# set work directory
WORKDIR ~/usr/src/app
COPY package.json ./
COPY package-lock.json ./
RUN npm install --silent
RUN npm install react-scripts@3.4.1 -g --silent
RUN npm run dev

# set work directory
WORKDIR /usr/src/app

# copy project
COPY . /usr/src/app/



# run entrypoint.sh
ENTRYPOINT ["/usr/src/app/entrypoint.sh"]

我得到的错误

>  => ERROR [12/18] COPY package.json ./                                
> 0.0s  => ERROR [13/18] COPY package-lock.json ./                                                                     0.0s ------
>  > [12/18] COPY package.json ./:
> ------
> ------
>  > [13/18] COPY package-lock.json ./:
> ------ failed to compute cache key: "/package-lock.json" not found: not found
4

2 回答 2

0

我编辑了你的Dockerfile,试试这是否有效:

# pull the official base image
FROM python:3.8.12-bullseye

RUN apt-get update

COPY . ./usr/src/app

WORKDIR /usr/src/app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install python dependencies
RUN pip install -r requirements.txt

WORKDIR /usr/src/app/frontend
RUN npm install --silent
RUN npm install react-scripts@3.4.1 -g --silent
RUN npm run dev

# run entrypoint.sh
ENTRYPOINT ["/usr/src/app/entrypoint.sh"]
于 2021-10-13T15:27:47.253 回答
0

问题是package.json并且package-lock.json不存在于您运行的目录中docker build,但(可能)存在于您的前端子目录中。

将这两行更改为:

COPY frontend/package.json ./
COPY frontend/package-lock.json ./

应该管用。但更好的是,由于无论如何您都在复制所有内容,您可以将其移至顶部:

# pull the official base image
FROM python:3.8.12-bullseye

# set work directory
WORKDIR /usr/src/app

# copy project
COPY . .

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install dependencies
RUN apt-get update
RUN apt-get update \
&& apt-get install -y curl \
&& curl --silent --location https://deb.nodesource.com/setup_12.x | bash - \
&& apt-get install -y nodejs \
&& npm install --silent\
&& npm install react-scripts@3.4.1 -g --silent
RUN pip install -r requirements.txt

# set work directory
WORKDIR /usr/src/app/frontend
RUN npm install --silent
RUN npm install react-scripts@3.4.1 -g --silent
RUN npm run dev

# set work directory
WORKDIR /usr/src/app

# run entrypoint.sh
ENTRYPOINT ["/usr/src/app/entrypoint.sh"]

我不确定您的需求是什么,但对于生产环境,我建议将前端和 Django 应用程序分离到不同的容器中。后端应用程序与前端应用程序具有非常不同的扩展和硬件需求。例如,您仍然可以使用 Docker-compose 将其打包到一个应用程序中。

于 2021-10-13T15:34:29.240 回答