sys.argv потерялся при использовании Dockerfile + pipenv + baker - PullRequest
0 голосов
/ 10 июня 2018

Рассмотрим следующий app.py

#!/usr/bin/env python
import baker

@baker.command
def initial_setup(setting1, setting2):
    # do some important prep work here

@baker.command
def start(arg1, arg2):
    # do your thing

if __name__ == '__main__':
    baker.run()

Здесь я использую Бейкер , который представляет мои функции в качестве подкоманд.

У меня также есть файл Docker:

FROM alpine
COPY . /app
WORKDIR /app
ENV SHELL=/bin/ash

RUN apk update && apk upgrade && apk add python3
RUN python3 -m pip install pip --upgrade
RUN python3 -m pip install pipenv

RUN pipenv install
RUN pipenv run ./app.py initial_setup foo bar
CMD pipenv run ./app.py start baz qux

Когда я запускаю docker build ., этап initial_setup завершается неудачно с

Step ...: RUN pipenv run ./app.py initial_setup foo bar
[...]
No command specified
The command '/bin/sh -c pipenv run ./app.py initial_setup foo bar' returned a non-zero code: 1

Когда я запускаю pipenv run ./app.py initial_setup foo bar в моей командной строке, он работает, но внутри сборки Dockerfileпохоже, что sys.argv не передается пекарю.

Есть идеи, как убедить файл докера передать аргументы моему приложению?

Обновление:

  • Я попытался как переместить команду initial_setup в сценарий оболочки, так и использовать bash over ash, но безрезультатно.
  • Добавил шаги, пропущенные в моем Dockerfile в ответ на * 1028Комментарий * @ stacksonstacks .

1 Ответ

0 голосов
/ 10 июня 2018

Оказалось, что sys.argv был принят, как и ожидалось, и я виноват только в своей глупости:

У меня было опечатка initial_setup, и в таких случаях пекарь не распознает аргумент как команду, поэтому появляется сообщение об ошибке «Команда не указана».

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