docker: Ошибка ответа от демона: Ошибка создания среды выполнения OCI: - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь запустить мой 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, который я установил. Я также попытался установить его на:

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

Без настройки среды мое приложение не будет работать.

Я также попытался запустить на моем файле Docker следующую команду:

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

Она успешно скомпилирована, но когда я ввожу эту команду в терминал:

docker выполнить -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'

1 Ответ

0 голосов
/ 17 апреля 2020

В вашем 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, чтобы осмотреться файловая система и запускают команды отладки, такие как env, но объявление ENTRYPOINT нарушает это использование, а наличие имени файла сценария в CMD означает, что это все еще не шаблон «контейнер как команда».)

...