使用 docker run 时 Docker 未正确安装

问题描述 投票:0回答:1

我正在使用 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"]
python linux docker csv ubuntu
1个回答
0
投票

不清楚您的

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
跟踪主机上文件内容的输出。

© www.soinside.com 2019 - 2024. All rights reserved.