我有一个简单的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传递文件句柄的最好方法是什么。因此,例如,应用程序将文件的路径作为输入,该文件通常驻留在主机上。有没有办法让我的容器化应用程序能够访问它?
发布于 2018-07-19 04:01:32
您必须将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"]
外壳形式:ENTRYPOINT command parameter1 parameter2
https://stackoverflow.com/questions/51402788
复制相似问题