Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
docker:来自守护程序的错误响应:OCI运行时创建失败:_Docker_Environment Variables - Fatal编程技术网

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

docker:来自守护程序的错误响应:OCI运行时创建失败:,docker,environment-variables,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

我正在尝试运行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"]
Step 11/14 : ENV PATH="/opt/gtk/bin:${env/development.env}"
failed to process "\"/opt/gtk/bin:${env/development.env}\"": missing ':' in substitution
我认为问题可能在于我设置的ENV路径。我还尝试将其设置为:

ENV PATH="/opt/gtk/bin:${env/development.env}"
但在构建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"]
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烧瓶应用程序

我收到一个错误,它仍然无法定位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'
$docker run-it flaskapp
回溯(最近一次呼叫最后一次):
文件“app.py”,第11行,在
app.config.from_对象(“config.config”)
文件“/usr/local/lib/python3.6/site packages/flask/config.py”,第174行,在from_对象中
obj=导入字符串(obj)
文件“/usr/local/lib/python3.6/site packages/werkzeug/utils.py”,第568行,输入字符串
__导入(导入名称)
文件“/socialworks api/config.py”,第4行,在
类配置(对象):
文件“/socialworks api/config.py”,第5行,在配置文件中
MYSQL\u HOST=os.environ['MYSQL\u HOST']
文件“/usr/local/lib/python3.6/os.py”,第669行,在__
从“无”提升钥匙错误(钥匙)
KeyError:'MYSQL\u主机'

在您指定的Docker文件中

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 yourmage/bin/sh
查看文件系统并运行调试命令,如
env
,但是
ENTRYPOINT
声明打破了这种用法,并且将脚本文件命名为
CMD
意味着它仍然不是“容器作为命令”模式。)

是的,您的
$PATH
设置将删除所有系统目录,如
/bin
/usr/bin
。确保在变量值中包含现有的
$PATH
。感谢您的回答。您能指定我应该在dockerfile中运行什么命令吗?因为我的完整环境路径是socialworks api/env/development.env,而我的workdir是socialworks api,所以我认为对于env/development.env来说应该足够了。谢谢您的回答。我使用ENV PATH的主要原因是声明我将使用开发环境。也许有更简单的方法来声明我将在docker中使用哪个环境?什么是“开发环境”呢?唯一可用的软件是Dockerfile中专门安装的软件;一个容器没有多个“环境”。我有一个config.py文件,在其中我编写了环境变量,例如MYSQL\u HOST=os.environ['MYSQL\u HOST']。设置特定环境时,将使用特定变量,在本例中,将使用development.env中的变量。如果我不声明环境,我将收到如上所述的错误,因此我需要设置将在dockerfile中使用的环境。我希望这是有意义的。这不是
PATH
环境变量的用途。它表示在哪里查找命令,如
sh
ls
python
,等等。数据文件或配置从未在那里查找过。谢谢,我误解了PATH环境变量的用途。因此,要声明我将使用哪个环境,我应该使用命令runexport$(grep-v'^#'./env/development.env|xargs)?因为不幸的是,我在使用这个命令时收到了上面提到的错误。