我建议你“装进”你的 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