【问题标题】:Bash: [psql] [python] [python3] [pip]: command not found (Similar Questions Don't Solve)Bash:[psql] [python] [python3] [pip]:找不到命令(类似的问题不解决)
【发布时间】:2021-08-22 19:58:01
【问题描述】:

我最近将 Docker 和 venvs 用于一个新的 Django 项目。我正在尝试运行我的服务器,但是,我遇到了bash: psql: command not found 的问题,因此,我遵循了一些不同的 Stack Overflow 建议,例如Postgresql -bash: psql: command not found,但实际上我把我的情况搞砸了。将路径更改为我的 postgres 的路径后,现在不仅无法识别 psql 命令,而且 python 或其他任何东西都无法识别。

我是虚拟环境和 docker 的新手,所以我很迷茫。有什么建议吗?

【问题讨论】:

    标签: python postgresql bash docker psql


    【解决方案1】:

    我建议你“装进”你的 docker 镜像并环顾四周。找出 psql 的安装位置并查看 PATH 环境变量的值。下面是“shell into”你的 docker 镜像的命令:

    docker run -it --entrypoint sh <image-name>
    

    使用以下命令在您的 docker 环境中找到图像名称:

    docker images 
    

    我知道我在使用 python 和 psql 时遇到了一些问题(我在 SO 上发帖解决了这个问题)。这是我最终使用的 Dockerfile:

    $ cat Dockerfile 
    FROM python:3.6-alpine as base
      
    FROM base as builder
    RUN mkdir /install
    RUN apk update && apk add postgresql-dev gcc python3-dev musl-dev
    WORKDIR /install
    COPY requirements.txt /requirements.txt
    RUN pip install --prefix=/install -r /requirements.txt
    
    FROM base
    COPY --from=builder /install /usr/local
    ENV PATH="/app:${PATH}"
    RUN apk --no-cache add libpq
    COPY src /app
    WORKDIR /app
    ENTRYPOINT [ "myapp" ] 
    
    
    $ cat requirements.txt 
    click
    requests
    configparser
    psycopg2
    flask
    

    我认为我的 requirements.txt 文件中唯一需要的包是 psycopg2。此外,您显然需要进行一些更改以包含您的依赖项并指定您的入口点(而不是“myapp”)。

    您也许可以完全忽略我的整个帖子,而只关注这一方面:

    ENV PATH="/app:${PATH}"
    

    PATH 告诉执行环境在哪里可以找到您的可执行文件。您看到的问题是 bash 找不到 psql - 因此将 PATH 更新到映像中安装 psql 的任何位置。如果您不知道图像中 psql 的路径,您可以通过运行图像(使用修改后的入口点,如上所示)并从根目录执行 find 来找到它。

    或者你可以组合如下命令:

    docker run -it --entrypoint sh <image-name> -c "find / -name psql "
    

    或者您甚至可以将find 设为您的入口点:

    docker run -it --entrypoint find <image-name>  / -name psql
    

    【讨论】:

    • (如果您使用CMD 而不是ENTRYPOINT 指定主容器命令,则可以使用更自然的docker run --rm image-name find / -name psql 语法,不使用--entrypoint 选项,也无需尴尬地拆分命令。)
    • @DavidMaze @Mark 试图跟踪其他堆栈溢出,我把它搞砸了,所以当我输入 docker images 时它会返回 bash: docker: command not found
    • 看起来你的主机的 PATH 也搞砸了(或者你没有安装 docker)。启动另一个终端会话以使您的 PATH 恢复正常(或编辑您的配置文件)。你的 bash 配置文件在这里:~/.bash_profile .
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 2016-07-09
    • 2023-01-04
    • 1970-01-01
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    相关资源
    最近更新 更多