0

我有个问题。我想安装PythonNode.js在同一个图像中。但是复制package.json有问题。错误说no such file or directory, open '/opt/app/src/package.json'。那么这里的问题是什么?我可能做错了什么?

我查看了Docker-compose up : no such file or directory, open '/usr/src/app/package.json',但我不知道我的错误在哪里。

Dockerfile

FROM python:3.7-slim AS build
RUN mkdir -p /opt/app/src
COPY ./requirements.txt /opt/app/src
RUN pip install -r /opt/app/src/requirements.txt

FROM node:14-slim
RUN mkdir -p /opt/app/src
WORKDIR /opt/app/src
COPY --from=build package-*.json ./
RUN npm install
EXPOSE 4001
CMD npm start

结构

|-- app.js
|-- requriments.txt
|-- test.js
|-- package.json
|-- routes
|-- |-- model.py
|-- |-- post_price.js

码头工人-compose.yml

version: '3.8'

services:
    backend:
        container_name: backend_airbnb
        image: backend_airbnb
        expose:
            - "4001"
        ports:
            - "4001:4001"
        networks:
            - backendProxyNetwork

networks:
    backendProxyNetwork:
      external: true

错误


CONTAINERS





Attaching to backend_airbnb

backend_airbnb | npm ERR! code ENOENT

backend_airbnb | npm ERR! syscall open

backend_airbnb | npm ERR! path /opt/app/src/package.json

backend_airbnb | npm ERR! errno -2

backend_airbnb | npm ERR! enoent ENOENT: no such file or directory, open '/opt/app/src/package.json'

backend_airbnb | npm ERR! enoent This is related to npm not being able to find a file.

backend_airbnb | npm ERR! enoent 

backend_airbnb | 

backend_airbnb | npm ERR! A complete log of this run can be found in:

backend_airbnb | npm ERR!     /root/.npm/_logs/2022-02-21T08_33_58_188Z-debug.log

backend_airbnb exited with code 254
4

3 回答 3

1

您可能可以在您的 nodejs 映像中安装 python。这是您可以做什么的非常基本的演示。

FROM node:14-alpine
WORKDIR /app

# Install Python
RUN apk add --no-cache python3 py3-pip

# Copy all required files    
COPY . .

# Install your python packages
RUN pip install -r /app/requirements.txt

# Install node applications
RUN npm install

# Expose Port
EXPOSE 4001

# Start App
CMD npm start
于 2022-02-21T09:08:30.390 回答
0

大概是因为COPY。试试这个:COPY --from=build package*.json ./

差异package*.jsonpackage-*.json

这将匹配 "package.json" 和 "package-lock.json" - 以前只有后者做了并且package.json没有复制(这是安装 deps 所必需的)。

于 2022-02-21T08:43:00.177 回答
0

您必须将此配置添加到您的 docker 文件中

ENV NODE_ENV=production

WORKDIR /app

COPY ["package.json", "package-lock.json*", "./"]

您没有指定 package.json 在您的项目目录中的位置。在您可以测试此解决方案之后:将您的 package.json 添加到 docker,您可以添加 COPY --from=builder package-*.json . 或如下所示:现代 Docker 版本允许使用多阶段构建。本质上,它允许在 Dockerfile 中有许多 FROM 子句,但只有最后一个 FROM 将用作我们的镜像的基础。这意味着其他阶段的所有层都将被丢弃,因此生成的图像会很小。

FROM rubygem/compass AS builder
COPY ./src/public /dist
WORKDIR /dist
RUN compass compile
# Output: css/app.css

Docker 构建引擎会将生成的文件保存在一个临时映像中,该映像可用于我们最终映像的 COPY 表达式:

# Copy compiled CSS styles from builder image.
COPY --from=builder /dist/css ./dist/css

在您可以通过以下命令启动并运行您的 docker compose 之后:

docker-compose up --build-arg NODE_ENV=<value>
于 2022-02-21T08:51:43.953 回答