我正在使用 ubuntu 22.04 LTS 服务器来尝试运行我的 python 脚本。创建图像后,我使用以下命令:
docker run -d --shm-size=5g -v /home/scripts/project:/home/scripts/project image_name
我的脚本读取并写入 csv 文件。它似乎一直有效,直到我重新启动它,因为当我重新启动它时,csv 文件似乎被删除了。我尝试使用 -v 挂载它,以便当脚本读取或写入 csv 文件时,我可以在读取目录中的 csv 文件时看到更改,例如,如果我使用 cat
。但是,即使我尝试安装容器并且在我知道我的程序已对 csv 文件进行更改之后,csv 文件似乎始终为空。如何更改运行命令以便脚本写入我指定目录中的 csv 文件?
这是我用来创建图像的 dockerfile:
FROM python:3.11
WORKDIR /app
COPY . /app
ENV TZ="America/Los_Angeles"
RUN pip install --trusted-host pypi.python.org -r requirements.txt
RUN apt-get update && \
apt-get install -y wget unzip
RUN wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb && \
apt install -y ./google-chrome-stable_current_amd64.deb && \
rm google-chrome-stable_current_amd64.deb
RUN apt-get clean
CMD ["python3.11", "-u", "bot.py"]
不清楚您的
bot.py
脚本正在做什么,但假设它写入当前目录中的文件。
这是一个虚拟脚本:
from datetime import datetime
import time
print("Running bot...")
with open("output.csv", "wt") as fid:
for i in range(10):
output = datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")
# Write to file.
print(f"- Writing '{output}'.")
fid.write(output+"\n")
# Flush buffer so that write happens immediately.
fid.flush()
time.sleep(5)
print("Done!")
它将内容写入当前目录中的文件
output.csv
。
FROM python:3.11
RUN apt-get update && \
apt-get install -y wget unzip && \
apt-get clean
WORKDIR /app
ENV TZ="America/Los_Angeles"
ENV PYTHONUNBUFFERED 1
COPY requirements.txt /app
RUN pip install --trusted-host pypi.python.org -r requirements.txt
RUN wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb && \
apt install -y ./google-chrome-stable_current_amd64.deb && \
rm google-chrome-stable_current_amd64.deb
COPY . /app
CMD ["python", "bot.py"]
容器上的当前(工作)目录是
/app
,因此当您进行卷挂载时,需要使用它作为目标。
docker build -t 78276951 . && docker run -it -v $(pwd):/app 78276951
-v $(pwd):/app
会将主机上的当前目录挂载到容器上的/app
上。然后输出将被写入主机当前目录中的output.csv
。
同样,如果您希望在主机上的
-v /home/scripts/project:/app
目录中专门创建文件,则可以使用 /home/scripts/project
。
下面的屏幕截图显示了正在运行的容器(顶部面板)以及
tail -f
跟踪主机上文件内容的输出。