2017-06-03 85 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 –