Dockerfile не может найти скопированную папку - PullRequest
0 голосов
/ 10 апреля 2019

Это довольно странно.

У меня есть такая структура

app/
CLI/
someOtherFolder/
  thingIwantToRun.py
tests.Dockerfile
Dockerfile
README.md
gunicorn.conf

Вот как выглядит мой Dockerfile

FROM python:3.6

WORKDIR /app

COPY ./requirements.txt /.requirements.txt
# Install any needed packages specified in requirements.txt
RUN pip install -r /.requirements.txt
COPY gunicorn.conf /gunicorn.conf

COPY . /app



EXPOSE 8000


RUN ls

ENV FLASK_ENV=development

CMD ["python ./someOtherFolder/thingIwantToRun.py"]

Это дает мне эту ошибку, когда я запускаю контейнер -

docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"ls ./someOtherFolder\": stat ls ./someOtherFolder: no such file or directory": unknown.

Когда я изменяю команду CMD на что-то еще, что не выходит из строя, и я прыгаю в контейнер, я вижу, что моя папка действительно там.

Когда я добавляю RUN ls в свой Dockerfile, я все еще вижу свою папку.

Если он существует, почему я не могу его запустить?

ОБНОВЛЕНИЕ -

Если я переместу thingIWantToRun.py в папку верхнего уровня и поменяю Docker CMD на

CMD [python thingIWantToRun.py]

Я вижу ту же проблему. Тем не менее, я могу ssh в контейнер и проверить, что файл там.

Ответы [ 2 ]

2 голосов
/ 10 апреля 2019

Проблема в том, как вы запускаете команду CMD.Это примерно так:

CMD ["executable", "param1", "param2"]

ref: https://docs.docker.com/engine/reference/builder/#cmd

В этом смысле фактическая команда должна быть

CMD ["python", "./someOtherFolder/thingIwantToRun.py"]

Докер пытается найти executablepart (первый элемент массива) и запустите его, и передаст ему остальные элементы массива (param1, param2).Если вы посмотрите на ошибку, она печатает

... process caused "exec: \"ls ./someOtherFolder\": stat ls ./someOtherFolder: no such file or directory"

Это говорит о том, что ls ./someOtherFolder не является файлом или каталогом и не может exec это!Это первый элемент массива, исполняемый файл!
Здесь ls должен быть первым элементом, а ./someOtherFolder должен быть вторым элементом массива для команды CMD.

0 голосов
/ 10 апреля 2019

Вам нужно использовать команду CMD примерно так:

CMD ["python", "./someOtherFolder/thingIwantToRun.py"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...