/bin/sh: 1: poetry: not found

6
我试图使用docker-compose up命令构建Docker文件,但是出现了错误:
/bin/sh: 1: poetry: not found
ERROR: Service 'web' failed to build: The command '/bin/sh -c poetry install && bundler install' returned a non-zero code: 127

这里是我的Docker文件和docker-compose.yml文件: Docker文件:

FROM python:2.7

ENV LIBRARY_PATH=/lib:/usr/lib

RUN curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python

WORKDIR /stream

ADD . /stream

CMD ["cat", "/etc/os-release"]


RUN poetry install && \
bundler install


EXPOSE 8000

CMD ["poetry", "run", "python", "manage.py", "runserver", "0.0.0.0:8000"]

docker-compose:

version: '3'

services:
  redis:
    image: redis
    ports:
      - 6379
  web:
    build: .
    ports:
      - 8000:8000
    environment:
      - REDISTOGO_URL=redis://redis:6379
    depends_on:
      - redis
4个回答

4

请将以下内容添加到您的Dockerfile中:

FROM python:2.7

ENV LIBRARY_PATH=/lib:/usr/lib

RUN curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python

WORKDIR /stream

ADD . /stream

ENV PATH="${PATH}:/root/.poetry/bin"

RUN poetry install && \
bundler install


EXPOSE 8000

CMD ["/root/.poetry/bin/poetry", "run", "python", "manage.py", "runserver", "0.0.0.0:8000"]

另一方面,您需要在Compose中设置一个“网络”,以便通过服务名称连接服务之间。

我测试过了,它可以工作。你需要删除旧的图像并重新构建它。如果你说一下哪些地方不起作用,那也会很有帮助。 - LinPy
我做了这件事,但是出现了以下错误: /root/.poetry/lib/poetry/_vendor/py2.7/subprocess32.py:149: RuntimeWarning: The _posixsubprocess module is not being used. Child process reliability may suffer if your program uses threads. "program uses threads.", RuntimeWarning)错误:服务“web”构建失败:命令“/bin/sh -c poetry install && bundler install”返回非零代码:1 - mohsen74x
尝试在RUN poetry install之前添加pip install -U subprocess32 - LinPy

2

poetry二进制文件未找到,因为其位置尚未包含在PATH环境变量中。 poetry安装程序仅会在您的.profile中添加一个命令,但不会重新加载这些设置。在Dockerfile中,在poetry安装命令之后,您需要添加这行代码(它重新加载了.profile)。

RUN source ${HOME}/.profile

poetry 安装程序会写入 ${HOME}/.profile

这么做的好处是不指定在这种情况下 $HOME/root(以防您需要稍后更改用户,并且由于安全原因不要将服务器以 root 用户身份运行)。


1
这不起作用。每个Docker命令都会在新的容器中启动一个新的shell。无论您源自何处,都不会传递到下一步。更多参考资料 - GabrielChu
我尝试了这个。现在它说:
运行 source ${HOME}/.profile: 11 0.150 /bin/sh: 1: source: 找不到命令
- sajid

0
将此内容添加到Dockerfile中。
ENV PATH="/root/.local/bin:$PATH"

0
根据官方文档,您需要为poetry设置环境变量,还有一个新的安装函数/链接,但是新的安装程序仅适用于Python 3语法。
尝试一下。
FROM python:[3x]

# ENV for poetry https://python-poetry.org/docs/configuration/#using-environment-variables
# make poetry create the virtual environment in the project's root, it gets named `.venv`
# and do not ask any interactive question
ENV POETRY_HOME="/opt/poetry" \
    POETRY_VIRTUALENVS_IN_PROJECT=true \
    POETRY_NO_INTERACTION=1

# Prepend poetry and venv to path
ENV PATH="$POETRY_HOME/bin:$VENV_PATH/bin:$PATH"

RUN apt-get update && apt-get install --no-install-recommends -y curl \
    && curl -sSL https://install.python-poetry.org | python

# Update poetry to latest version
RUN poetry self update

WORKDIR /stream
ADD . /stream

CMD ["cat", "/etc/os-release"]

RUN poetry install && \
bundler install


EXPOSE 8000

CMD ["poetry", "run", "python", "manage.py", "runserver", "0.0.0.0:8000"]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接