Tes*_*est 2 python node.js docker dockerfile docker-compose
我在 Node.js 中编写了一个小脚本,该脚本调用 Python 文件并拦截 Python 文件的输出。我首先使用 构建 Dockerfile,docker build -t backend_airbnb .然后使用 运行 docker compose docker compose up -d。之后我检查容器是否正在运行,但它直接关闭,没有错误消息。它只是说backend_airbnb exited with code 0。
如何构建一个多阶段 Dockerfile,首先安装 python 要求,然后安装 Node(反之亦然)并运行npm start?这样我就可以在 POST 请求进入时执行我的 Python 文件。
文件夹结构
|-- app.js
|-- requriments.txt
|-- test.js
|-- routes
|-- |-- model.py
|-- |-- post_price.js
Run Code Online (Sandbox Code Playgroud)
Dockerfile
FROM python:3.6.8
#RUN mkdir -p /usr/src/app
COPY requirements.txt /opt/app/requirements.txt
WORKDIR /opt/app
RUN pip install -r requirements.txt
FROM node:14
WORKDIR /opt/app
COPY package*.json ./
RUN npm install
ENV NODE_ENV=container
COPY . .
EXPOSE 4001
CMD npm start
Run Code Online (Sandbox Code Playgroud)
docker-compose.yml
FROM python:3.6.8
#RUN mkdir -p /usr/src/app
COPY requirements.txt /opt/app/requirements.txt
WORKDIR /opt/app
RUN pip install -r requirements.txt
FROM node:14
WORKDIR /opt/app
COPY package*.json ./
RUN npm install
ENV NODE_ENV=container
COPY . .
EXPOSE 4001
CMD npm start
Run Code Online (Sandbox Code Playgroud)
编辑 不起作用,仍然是同样的问题新的 Dockerfile(多个 FROM - 这意味着什么)
FROM python:3.6.8 AS build
#RUN mkdir -p /usr/src/app
COPY requirements.txt /opt/app/requirements.txt
WORKDIR /opt/app
RUN pip install -r requirements.txt
FROM node:14
WORKDIR /opt/app
COPY --from=build package*.json ./
RUN npm install
ENV NODE_ENV=container
COPY . .
EXPOSE 4001
CMD npm start
Run Code Online (Sandbox Code Playgroud)
您定义的图像存在一些错误:
第一。您正在尝试从映像使用 Python node,但该映像尚未python安装,因此这不起作用。
第二。即使您在多阶段构建的第一阶段安装了 Python 依赖项,如果您不将这些依赖项传递到下一阶段,就好像您没有执行任何操作。
实现你想要的东西的方法很少,但我会告诉你我会做什么。
首先,您需要同意在项目中使用哪个 Python 版本,假设您想使用 Python 3.10。
然后,您需要venv在该构建容器中创建一个,因为这是您随后将传递给运行时容器的内容:
FROM python:3.10 as build
WORKDIR /opt/app
RUN python -m venv /opt/app/venv
ENV PATH="/opt/app/venv/bin:$PATH"
COPY requirements.txt .
RUN pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)
现在,您将在您的 上安装所有依赖项venv,因此您可以将它们携带到运行时容器(您需要在其中安装与构建映像中使用的相同的 Python 版本)。
FROM node:14
RUN apt update \
&& apt install software-properties-common \
&& add-apt-repository ppa:deadsnakes/ppa \
&& apt update \
&& apt install python3.10
WORKDIR /opt/app
COPY --from=build /opt/app/venv /venv
ENV PATH="/opt/app/venv/bin:$PATH"
ENV NODE_ENV=container
COPY package-*.json .
RUN npm install
COPY . .
EXPOSE 4001
CMD npm start
Run Code Online (Sandbox Code Playgroud)
这样,您将在运行时 Node 映像上安装 Python 3.10,并在 Python 3.10 构建映像上安装您已经下载/编译的依赖项。
| 归档时间: |
|
| 查看次数: |
8589 次 |
| 最近记录: |