2017-06-03 83 views
1

我已经创建了如下Dockerfile泊坞窗文件与熊猫

FROM python 
COPY . /home 
CMD pip install pandas 
CMD mkdir /home/report 
CMD mkdir /home/data 
CMD python /home/hello.py 

其中hello.py是简单的Python脚本

name = input('What is your Name? ') 
print('Nice to meet you', name) 

from pandas import read_csv 
mydf = read_csv('mycsv.csv') 
print(mydf.head()) 

然后,我docker build -t myexample .建立泊坞窗图像和docker run -it myexample bash运行它运行Python以便通过外壳与它进行交互。该建筑去罚款及运行它,我带有shell提示符,但后来:

  • 没有目录reportdata/home下创建。
  • 最后的命令python /home/hello.py不会自行执行。我必须自己输入才能使脚本运行。
  • 一旦我输入python /home/hello.py,迎接并提示我姓名的前两行就会正确执行,但错误表示熊猫未知。
  • 直到我手动安装熊猫,整个脚本才能正确运行。

因此,总之,CMD声明似乎没有被考虑在内。我究竟做错了什么?

+0

只有最后一个CMD有效,您应该将所有其他CMD替换为一个RUN – user2915097

回答

0

当你build图像使用RUN来执行命令。然后,使用CMD只有一次宣布将在生成后启动容器的命令(所以只有CMD):

Dockerfile:

FROM python 
RUN pip install pandas 
RUN mkdir /home/report 
RUN mkdir /home/data 

COPY . /home 
WORKDIR /home 
CMD python /home/hello.py 

mycsv.csv:

a,b,c 
1,2,3 
4,5,6 

构建具有:docker build . -t pandas-test

运行:

▶ docker run -it pandas-test 
What is your Name? Tfovid 
Nice to meet you Tfovid 
    a b c 
0 1 2 3 
1 4 5 6 
1
FROM python 
RUN pip install --no-cache-dir pandas && \ 
    mkdir /home/report /home/data && \ 
    chmod +x /home/hello.py 
COPY . /home 
VOLUME /home/report /home/data 
WORKDIR /home 
ENTRYPOINT /home/hello.py 

注:

  • 作为一般规则,这是更好地倒塌2级运行的语句为一个,这样会创建一个层。
  • 我建议你使用比/ home更好的目录
  • 使用卷来存储数据和日志。
+0

为什么建议使用另一个不是'/ home'的目录?你能举个例子吗? – Tfovid

+0

https://en.m.wikipedia.org/wiki/Filesystem_Hierarchy_Standard –