关于python:容器外部的Docker输入/输出

Docker input/output outside the container

我用python脚本创建了一个docker容器。python脚本接受一个输入文件,进行一些处理,并将输出文件保存在指定的位置。

1
docker run /app/script.py --input /data/input.csv --output /data/output.csv

因为每次运行脚本时输入文件都可能不同,所以我希望它在Docker容器之外。我还想将输出存储在容器之外的某个地方。

1
docker run /app/script.py --input /my/local/location/outside/docker/input.csv --output /my/local/location/outside/docker/output.csv

Docker支持这个吗?如果是这样的话,一个人怎么能做到呢?

我的Dockerfile如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
FROM phusion/baseimage

RUN apt-get update
RUN apt-get install -y build-essential
RUN apt-get install -y python-dev
RUN apt-get install -y python-pip
RUN apt-get install -y python-numpy && \
    apt-get install -y python-scipy

COPY ./requirements.txt /app/requirements.txt
COPY ./src/script.py /app/script.py

WORKDIR /app
COPY . /app


您可以使用-v选项挂载一个目录,其中包含作为docker数据卷的文件:https://docs.docker.com/engine/tutorials/dockervolumes/

1
docker run -d -P --name myapp -v /app mydir/app python script.py

这将有一个额外的好处,即允许您停止容器、更改文件、启动容器并查看容器中反映的更改。


所以你应该在你的文件里加一行

ENTRYPOINT ["python","/app/script.py"]

和A

CMD myinput

或者类似的东西,

阅读

dockerfile中的cmd和entrypoint有什么区别?

阅读文档

https://docs.docker.com/engine/reference/builder/入口点

https://docs.docker.com/engine/reference/builder/命令