Python sys.argv在使用Dockerfile+;pipenv+;面包师

Python sys.argv在使用Dockerfile+;pipenv+;面包师,python,docker,dockerfile,command-line-arguments,pipenv,Python,Docker,Dockerfile,Command Line Arguments,Pipenv,考虑下面的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() 在这里,我

考虑下面的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时。初始设置步骤失败

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\u setup foo bar
时,它可以工作,但在Dockerfile构建中,
sys.argv
似乎没有传递给baker

知道如何说服docker文件将参数传递给我的应用程序吗

更新:

  • 我尝试将初始的_setup命令移动到shell脚本中,并使用bash over ash,但都没有成功
  • 添加了从我的Dockerfile中删除的步骤,以响应的评论

结果是
sys.argv
按预期通过,我只能怪我的愚蠢:


我有一个拼写错误
initial\u setup
,在这种情况下,baker无法将参数识别为命令,因此出现错误消息“未指定命令”。

您需要安装python、pip OS软件包和pipenv+baker pypi软件包。e、 g.
运行apk add--no cache python python pip&&pip install baker pipenv
@stacksonstacks我做了与你建议的非常相似的事情,我只是在OP中省略了它,但你的观点是正确的,所以我把它放回去了。