我有Dockerfile来为Django项目构建图像,该项目使用Python 3.11并在诗歌环境中运行(请参阅下面的内容)。问题是,当我尝试下载get-pip.py
文件并使用Python运行它时,它说没有这样的文件或目录,但它应该在Dockerfile所在的同一个目录中。我不知道,但为什么不在那里?
P.S.我使用的是WSL 2(Ubuntu 20.04)的docker desktop,Dockerfile在project目录下(poetry.lock
和pyproject.toml
文件所在的目录),/website
是django project所在的目录。
# Download image of Ubuntu 20.04
FROM ubuntu:20.04
# To prevent interactive dialogs
ENV TZ=Europe \
DEBIAN_FRONTEND=noninteractive
# Update and install necessary packages
RUN apt-get update \
# Install necessary packages to allow compilation of source code
&& apt-get install -y --no-install-recommends \
tzdata \
build-essential \
checkinstall \
libreadline-gplv2-dev \
libncursesw5-dev \
libssl-dev \
libsqlite3-dev \
tk-dev \
libgdbm-dev \
libc6-dev \
libbz2-dev \
software-properties-common \
# Install python 3.11
&& apt-get update \
&& add-apt-repository ppa:deadsnakes/ppa \
&& apt-get install -y --no-install-recommends \
python3.11
# Install pip for Python 3.11
RUN curl -sS -O https://bootstrap.pypa.io/get-pip.py | python3.11
# THERE'S AN ERROR
RUN python3.11 get-pip.py
# Install poetry
ENV POETRY_VERSION 1.4.2
RUN python3.11 -m pip install "poetry==$POETRY_VERSION"
# Install dependencies
RUN poetry install
# Run poetry env
ENTRYPOINT ["poetry", "shell"]
# Go to website folder
WORKDIR /website
# Run Django server
CMD ["python3.11", "manage.py", "runserver"]
3条答案
按热度按时间mccptt671#
如果你想把curl输出直接传递给python。不要使用-O参数。
-O,--remote-name:将输出写入一个本地文件,该文件的名称与我们获得的远程文件类似。
而不是这些线。
你就写吧
answer也会帮助你。
更新:先安装curl,然后再运行上述curl命令。
55ooxyrt2#
您使用pipe(
|
)将其转发到python,因此该文件不会最终位于目录中,而是作为python.311
的标准输入。你有两个选择
RUN python3.11 get-pip.py
),因为这是您在上一行通过管道所做的ctehm74n3#
而不是下载并运行
get-pip.py
参见the docs on
ensurepip
。