Docker 在复杂架构中使用 Web 服务创建
Docker creation with web service in complex architecture
我需要创建一个 docker 包含一些代码和一个小型 flask 服务器来公开部分代码。但我很难让它适用于我复杂的文件架构。
我的文件组织为:
main_project
--sub_part_1
--repo_1
--some_code.py
--repo_2
--app.py
--Dockerfile
--repo_3
Pipfile.lock
--sub_part_2
--sub_part_3
--docker-compose.yml
我必须创建一个 Dockerfile 和一个 docker-compose.yml 到 运行 app.py(flask 应用程序)并在给定端口上公开它
我现在拥有的是
Docker 文件
FROM python:3.8-slim-buster as base
ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONFAULTHANDLER 1
ENV PYTHONUNBUFFERED 1
ENV FLASK_APP subpart_1/repo_2/app.py
ENV FLASK_RUN_HOST 0.0.0.0
RUN pip install pipenv
RUN apt-get update && apt-get install -y --no-install-recommends build-essential libpq-dev gcc musl-dev
COPY ./subpart_1/Pipfile /subpart_1/Pipfile
COPY ./subpart_1/Pipfile.lock /subpart_1/Pipfile.lock
WORKDIR /subpart_1
RUN PIPENV_VENV_IN_PROJECT=1 pipenv install --deploy --ignore-pipfile --sequential
WORKDIR /
COPY ./subpart_1/repo_2 /subpart_1/repo_2/
COPY ./subpart_1/repo_1 /subpart_1/repo_1/
ENV PYTHONPATH /subpart_1/
WORKDIR /subpart_1
EXPOSE 5000
CMD ["flask", "run"]
和docker-compose.yml
version: "3.9"
services:
web:
build: subpart_1/repo_2/
ports:
- "5000:5000"
但是当我进入 main_project 目录并且 运行 docker-compose up
我有
failed to compute cache key: failed to walk /var/lib/docker/tmp/buildkit-mount585608421/subpart_1: lstat /var/lib/docker/tmp/buildkit-mount585608421/subpart_1: no such file or directory
ERROR: Service 'web' failed to build : Build failed
在我看来这是一个路径问题。
在 docker-compose 构建文件中设置 subpart_1/repo_2/
时,构建将在此目录中完成。 Docker 将看到以下文件:
-app.py
-Dockerfile
因此副本./subpart_1/Pipfile /subpart_1/Pipfile
无法工作。
我认为最简单的方法是:
version: "3.9"
services:
web:
build:
context: .
dockerfile: sub_part_1/repo_2/Dockerfile
ports:
- "5000:5000"
我需要创建一个 docker 包含一些代码和一个小型 flask 服务器来公开部分代码。但我很难让它适用于我复杂的文件架构。 我的文件组织为:
main_project
--sub_part_1
--repo_1
--some_code.py
--repo_2
--app.py
--Dockerfile
--repo_3
Pipfile.lock
--sub_part_2
--sub_part_3
--docker-compose.yml
我必须创建一个 Dockerfile 和一个 docker-compose.yml 到 运行 app.py(flask 应用程序)并在给定端口上公开它
我现在拥有的是
Docker 文件
FROM python:3.8-slim-buster as base
ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONFAULTHANDLER 1
ENV PYTHONUNBUFFERED 1
ENV FLASK_APP subpart_1/repo_2/app.py
ENV FLASK_RUN_HOST 0.0.0.0
RUN pip install pipenv
RUN apt-get update && apt-get install -y --no-install-recommends build-essential libpq-dev gcc musl-dev
COPY ./subpart_1/Pipfile /subpart_1/Pipfile
COPY ./subpart_1/Pipfile.lock /subpart_1/Pipfile.lock
WORKDIR /subpart_1
RUN PIPENV_VENV_IN_PROJECT=1 pipenv install --deploy --ignore-pipfile --sequential
WORKDIR /
COPY ./subpart_1/repo_2 /subpart_1/repo_2/
COPY ./subpart_1/repo_1 /subpart_1/repo_1/
ENV PYTHONPATH /subpart_1/
WORKDIR /subpart_1
EXPOSE 5000
CMD ["flask", "run"]
和docker-compose.yml
version: "3.9"
services:
web:
build: subpart_1/repo_2/
ports:
- "5000:5000"
但是当我进入 main_project 目录并且 运行 docker-compose up
我有
failed to compute cache key: failed to walk /var/lib/docker/tmp/buildkit-mount585608421/subpart_1: lstat /var/lib/docker/tmp/buildkit-mount585608421/subpart_1: no such file or directory
ERROR: Service 'web' failed to build : Build failed
在我看来这是一个路径问题。
在 docker-compose 构建文件中设置 subpart_1/repo_2/
时,构建将在此目录中完成。 Docker 将看到以下文件:
-app.py
-Dockerfile
因此副本./subpart_1/Pipfile /subpart_1/Pipfile
无法工作。
我认为最简单的方法是:
version: "3.9"
services:
web:
build:
context: .
dockerfile: sub_part_1/repo_2/Dockerfile
ports:
- "5000:5000"