我有一个脚本python wich应该输出一个文件csv。我试图将此文件保存在当前的工作目录中,但没有成功。
这是我的Dockerfile
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
有人可以帮助我吗?谢谢。
答案 0 :(得分:0)
您的脚本Main.py
可能没有尝试写入/home/learn/rstudio_script/output
。由于Dockerfile中的最后一个/app
指令,因此容器中的工作目录为WORKDIR
。您可以在运行时使用--workdir
覆盖它,但随后也必须更改CMD
。
一种解决方案是让脚本将文件写入/output/
,然后像这样运行它:
docker container run -v $PWD:/output/ image
答案 1 :(得分:0)
将卷绑定为仅将容器上的1个文件保存到主机上是不明智的做法。
相反,您应该利用copy命令:
docker cp <containerId>:/file/path/within/container /host/path/target
您可以将此命令设置为在docker运行后使用bash自动执行。
类似这样:
#!/bin/bash
# this stores the container id
CONTAINER_ID=$(docker run -dit img)
docker cp $CONTAINER_ID:/some_path host_path
如果您坚持使用绑定卷,那么正如其他人所指出的那样,问题很可能是您的python脚本没有将csv输出到正确的路径。