Python sys.argv在使用Dockerfile+;pipenv+;面包师
考虑下面的app.pyPython 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() 在这里,我
#!/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中省略了它,但你的观点是正确的,所以我把它放回去了。