泊坞窗:来自守护程序的错误响应:OCI运行时创建失败:

时间:2020-04-17 08:49:16

标签: docker environment-variables

我正在尝试运行docker映像,但是收到以下错误:

docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"python3\": executable file not found in $PATH": unknown.
ERRO[0000] error waiting for container: context canceled

这是我的Dockerfile:

FROM python:3.6-alpine3.7

RUN apk add --no-cache python3-dev \
    && pip3 install --upgrade pip

RUN apk add --no-cache --update \
    python3 python3-dev gcc \
    gfortran musl-dev

RUN apk add --no-cache libressl-dev musl-dev libffi-dev

RUN python3.6 -m pip install --upgrade pip

RUN apk --no-cache add git

RUN apk add mariadb-dev

WORKDIR /socialworks-api

COPY . /socialworks-api

RUN pip3 --no-cache-dir install -r requirements.txt

ENV PATH="/opt/gtk/bin:$env/development.env"

EXPOSE 5000

ENTRYPOINT ["python3"]
CMD ["app.py"]

我认为问题可能出在我设置的ENV PATH上。我也尝试将其设置为:

ENV PATH="/opt/gtk/bin:${env/development.env}"

但是构建我的dockerfile时会收到以下错误:

Step 11/14 : ENV PATH="/opt/gtk/bin:${env/development.env}"
failed to process "\"/opt/gtk/bin:${env/development.env}\"": missing ':' in substitution

不设置环境,我的应用程序将无法运行。

我也尝试过在dockerfile上运行以下命令:

RUN export $(grep -v '^#' ./env/development.env | xargs)

它构建成功,但是当我在终端输入以下命令时:

docker run -it flaskapp

我收到一个错误,提示它仍然无法找到环境变量。

$ docker run -it flaskapp
Traceback (most recent call last):
  File "app.py", line 11, in <module>
    app.config.from_object("config.Config")
  File "/usr/local/lib/python3.6/site-packages/flask/config.py", line 174, in from_object
    obj = import_string(obj)
  File "/usr/local/lib/python3.6/site-packages/werkzeug/utils.py", line 568, in import_string
    __import__(import_name)
  File "/socialworks-api/config.py", line 4, in <module>
    class Config(object):
  File "/socialworks-api/config.py", line 5, in Config
    MYSQL_HOST = os.environ['MYSQL_HOST']
  File "/usr/local/lib/python3.6/os.py", line 669, in __getitem__
    raise KeyError(key) from None
KeyError: 'MYSQL_HOST'

1 个答案:

答案 0 :(得分:0)

在您的Dockerfile中指定

ENV PATH="/opt/gtk/bin:$env/development.env"

稍后运行python3时,系统仅在 这两个目录中查找,并且当其中没有Python时,您将看到错误。它可能在/usr/bin/python3中,但是目录/usr/bin不在$PATH中。

最简单的答案是完全删除此行。您的Dockerfile既不会创建/opt/gtk也不会创建/development.env目录,因此任一路径中都没有可以执行的文件。如果确实需要安装自定义软件,则将其放置在默认系统路径(例如/usr/local/bin)中的目录中是一种好方法。

如果您确实需要保留此行,请确保现有的$PATH保留在该值中。

ENV PATH="/opt/gtk/bin:$PATH"

(不要指定ENTRYPOINT ["python"];将其合并为一个CMD ["python3", "app.py"]。我建议您运行docker run --rm -it yourimage /bin/sh来查看文件系统并运行诸如{{1 }},但是env声明打破了这种用法,并且在ENTRYPOINT中命名脚本文件意味着它仍然不是“ container-as-command”模式。)