docker: 来自守护进程的错误响应:OCI 运行时创建失败:

标签 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

我收到一个错误,它仍然无法找到 env 变量。
$ 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'

最佳答案

在您的 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作为值(value)的一部分。
ENV PATH="/opt/gtk/bin:$PATH"

(不要指定 ENTRYPOINT ["python"] ;将其合并为一个 CMD ["python3", "app.py"] 。我鼓励您运行 docker run --rm -it yourimage /bin/sh 来查看文件系统并运行调试命令,如 env ,但 ENTRYPOINT 声明打破了这一点使用,并且在 CMD 中命名脚本文件意味着它仍然不是“容器作为命令”模式。)

关于docker: 来自守护进程的错误响应:OCI 运行时创建失败:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61267569/

相关文章:

mysql - 为什么连接到 Google Cloud SQL 在 Docker 容器内失败但在 Docker 容器外成功?

java - 在字符串中插入环境变量

javascript - 环境变量在路径中返回 null

django - 使用 PostgreSQL Dockerize 我的 Django 应用程序,数据库意外启动和关闭

python - Dockerfile 努力安装 Python Geopandas 模块

Docker 容器 RestartCount 不增加

c - 为什么我不能在 gdb 中打印出环境变量?

docker - dockerfile:从主机获取环境变量

c# - java不可见的环境变量

grails - 设置环境变量