docker -compose --build не может найти python исполняемый файл, но docker run делает - PullRequest
1 голос
/ 19 февраля 2020

Я создал несколько docker изображений для каждого простого приложения flask, я проверял, что они запускаются, как и ожидалось, при использовании команды docker run. Теперь я пытаюсь подключить эти службы, используя docker -compose, и когда я запускаю docker-compose up --build, я получаю следующую ошибку: Cannot start service lungs: OCI runtime create failed: container_linux.go:346: starting container process caused "exec: "python\": executable file not found in $PATH": unknown.

Если я запускаю тот же контейнер в интерактивном режиме и проверяю PATH Я вижу, что это указывает на правильный python исполняемый файл. Мой dockerfile содержит:

FROM base_private_image # sets up a user and miniconda on ubuntu
USER root
ADD ./ ./ . # copy flask code into image
RUN pip install flask requests
USER user # setup in the base_private_image, we need our containers not to run as root
CMD ["python", "app.py"] # I've tried many variations of this CMD, all with the same result

пример содержимого docker -compose.yml

version: '3'
services:
  central_service:
      build: ./central_service
      restart: always
      environment:
         - PATH=/home/user/miniconda3/bin/:$PATH
      ports:
        - '5010:5010'
      expose:
        - 5010

Кто-нибудь может указать, какая функциональная разница между docker -compose и docker run может быть причиной этого? Я не могу найти никаких проблем с установкой miniconda или python или PATH, поэтому я думаю, что это должно быть что-то скрытое в docker -compose?

, чтобы добавить: dockerfile that работает, docker -композит можно найти python:

FROM python:3.7.6-slim

RUN mkdir /trigger_app
WORKDIR /trigger_app

COPY requirements.txt ./
RUN pip install -r requirements.txt

ADD . ./

EXPOSE 6000

CMD flask run --host=0.0.0.0 --port=6000

1 Ответ

0 голосов
/ 19 февраля 2020

Попробуйте установить переменную среды PATH внутри Dockerfile

ENV PATH /home/user/miniconda3/bin/:$PATH

И удалить environment: PATH внутри docker-compose.yml (С помощью этого вы будете передавать переменную PATH вашей машины в контейнер)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...