Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker python输出csv文件_Python_Docker_Dockerfile - Fatal编程技术网

Docker python输出csv文件

Docker python输出csv文件,python,docker,dockerfile,Python,Docker,Dockerfile,我有一个python脚本,它应该输出一个csv文件。我正在尝试将此文件放在当前工作目录中,但未成功 这是我的文件 FROM python:3.6.4 RUN apt-get update && apt-get install -y libaio1 wget unzip WORKDIR /opt/oracle RUN wget https://download.oracle.com/otn_software/linux/instantclient/instantclient-

我有一个python脚本,它应该输出一个csv文件。我正在尝试将此文件放在当前工作目录中,但未成功

这是我的文件

FROM python:3.6.4

RUN apt-get update && apt-get install -y libaio1 wget unzip

WORKDIR /opt/oracle 
RUN wget https://download.oracle.com/otn_software/linux/instantclient/instantclient- 
basiclite-linuxx64.zip && \ unzip instantclient-basiclite-linuxx64.zip && rm 
-f instantclient-basiclite-linuxx64.zip && \ cd /opt/oracle/instantclient* 
&& rm -f jdbc occi mysql *README jar uidrvci genezi adrci && \ echo 
/opt/oracle/instantclient > /etc/ld.so.conf.d/oracle-instantclient.conf && 
ldconfig 
RUN pip install --upgrade pip

COPY . /app 
WORKDIR /app

RUN pip install --upgrade pip 
RUN pip install pystan 
RUN apt-get -y update && python3 -m pip install cx_Oracle --upgrade 
RUN pip install -r requirements.txt

CMD [ "python", "Main.py" ]
并使用以下命令运行容器

docker container run -v $pwd:/home/learn/rstudio_script/output image

您的脚本
Main.py
可能没有尝试写入
/home/learn/rstudio\u脚本/output
。由于Dockerfile中的最后一个
WORKDIR
指令,容器中的工作目录为
/app
。您可以在运行时使用
--workdir
覆盖该命令,但是
CMD
也必须更改

一种解决方案是让脚本将文件写入
/output/
,然后按如下方式运行:

docker container run -v $PWD:/output/ image

绑定卷只是为了将容器中的1个文件保存到主机上,这是一种糟糕的做法

相反,您应该利用copy命令:

docker cp <containerId>:/file/path/within/container /host/path/target

如果您坚持使用绑定卷,那么正如其他人所指出的,问题很可能是您的python脚本没有将csv输出到正确的路径。

可能Main.py没有输出到/home/learn/rstudio_script/output。如果您的过程的主要目标是读写本地文件,Docker的文件系统隔离对您不利。考虑在Python虚拟环境中运行DOCKER之外的相同进程。
#!/bin/bash

# this stores the container id
CONTAINER_ID=$(docker run -dit img)

docker cp $CONTAINER_ID:/some_path host_path