我创建了以下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镜像,并使用docker run -it myexample bash
运行它,以便通过shell与它进行交互。建筑物运行良好,在运行它时,我提出了shell提示符,但随后:
report
下未创建目录data
或/home
。python /home/hello.py
不会自行执行。我必须自己输入以运行脚本。python /home/hello.py
,前两行迎接并提示我的名字就会被正确执行,但是一个错误就说大熊猫是未知的。因此,总而言之,似乎没有考虑CMD
个陈述。我做错了什么?
答案 0 :(得分: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
注意:
答案 1 :(得分: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