我有一个简单的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指令与ENTRYPOINT一起使用(以exec形式)

ENTRYPOINT ["python", "-m", "myapp.testapp"]
CMD [""]

确保要传递给CMD的任何默认值(上述代码段中的"")都被主命令忽略

完成后,docker run -ti myimg
该命令将作为python -m myapp.testapp ''执行

完成后,docker run -ti mying -h
该命令将作为python -m myapp.testapp -h执行

注意:
exec形式:ENTRYPOINT ["command", "parameter1", "parameter2"] shell 形式:ENTRYPOINT command parameter1 parameter2

关于docker - 如何将命令行参数传递给我的dockerized python应用程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51402788/

10-16 15:54
查看更多