Docker 如何将命令行参数传递给停靠的python应用程序

Docker 如何将命令行参数传递给停靠的python应用程序,docker,Docker,我有一个简单的docker文件,我正在使用它来封装我的python应用程序。该应用程序实际上将文件路径作为命令行参数。这是我第一次使用Docker,我想知道如何实现这一点: FROM python:3.6-slim COPY . /app WORKDIR /app RUN apt-get update && apt-get -y install gcc g++ # Install numpy, pandas, scipy and scikit RUN pip install

我有一个简单的docker文件,我正在使用它来封装我的python应用程序。该应用程序实际上将文件路径作为命令行参数。这是我第一次使用Docker,我想知道如何实现这一点:

FROM python:3.6-slim

COPY . /app
WORKDIR /app

RUN apt-get update && apt-get -y install gcc g++
# Install numpy, pandas, scipy and scikit
RUN pip install --upgrade pip

RUN pip --no-cache-dir install -r requirements.txt
RUN python setup.py install

ENTRYPOINT python -m myapp.testapp
请注意,python应用程序是从带有
-m
标志的模块运行的

这将使图像完全清晰。我还可以使用以下方式运行它:

docker run -ti myimg
但是,我不能向它传递任何命令行参数。例如,我的应用程序使用-h选项打印一些帮助选项

但是,将docker运行为:

docker run -ti myimg -h
什么都不做。因此,没有传递命令行选项


此外,我还想知道将文件句柄从主机传递给docker的最佳方式是什么。因此,例如,应用程序将文件的路径作为输入,文件通常位于主机上。有没有办法让我的集装箱应用程序能够访问它?

您必须使用
CMD
指令以及
入口点(exec格式)

确保主命令忽略传递给CMD的任何默认值(

当您这样做时,
docker运行-ti myimg

命令将作为python-m myapp.testapp“”执行。

当您这样做时,
docker run-ti mying-h

该命令将作为python-m myapp.testapp-h执行

注:
执行表单:
ENTRYPOINT[“命令”、“参数1”、“参数2”]


shell形式:
ENTRYPOINT命令参数1参数2

我会选择默认的入口点(如果没有弄错,通常是
/bin/sh-c
),也会选择
docker run-ti myimg python-m myapp.testapp-h
。你能试试吗?谢谢。成功了。我以前尝试过这个,但没有使用exec表单。再次感谢!
ENTRYPOINT ["python", "-m", "myapp.testapp"]
CMD [""]