Рассмотрим следующий 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 .