【问题标题】:Unable to mount host directory to docker container无法将主机目录挂载到 docker 容器
【发布时间】:2022-01-23 07:43:59
【问题描述】:

我有一个每天运行的 python 应用程序来下载图像并将它们保存到指定的文件夹中,每天创建这样的文件夹/home/ubuntu/images/yyyymmdd

我在 ubuntu 20 上构建了我的 python 应用程序的 docker 容器。当我尝试通过挂载主机目录来运行应用程序时,日志消息打印文件夹创建 /home/ubuntu/images/20220123 但我看不到任何文件夹。

我检查了 docker 文件夹 /var/lib/docker 并发现 随机哈希 是在文件夹 containersoverlay2 内创建的。因此,我尝试使用以下两个目录进行挂载,但没有运气。

sudo docker run -t -i -v /home/ubuntu/images:/var/lib/docker/containers --network=host testapp/img-downloader:0.0.1

sudo docker run -t -i -v /home/ubuntu/images:/var/lib/docker/overlay2 --network=host testapp/img-downloader:0.0.1

我可以看到在图像文件夹中创建的数据文件夹和图像文件是这样保存的

/var/lib/docker/overlay2/d52bcf61cae2e563c3c8561bab53b4bb2dd2ea2d633a14d40c96d7992fffae28/diff/home/ubuntu/images/20220123

我在这里缺少什么,因此它不会将图像保存到主机目录,例如 /home/ubuntu/images/20220123,而不是内部 docker 容器。

我的 Dockerfile 如下 -

FROM alpine:3.14

ENV PYTHONUNBUFFERED=1
RUN apk add --update --no-cache python3-dev mariadb-dev gcc musl-dev g++ && ln -sf python3 /usr/bin/python

RUN python3 -m ensurepip
RUN pip3 install --no-cache --upgrade pip setuptools

COPY ./requirements.txt /requirements.txt

WORKDIR /

RUN pip3 install -r requirements.txt

COPY ./ /

ENTRYPOINT [ "python3" ]

CMD [ "./main.py" ]

请在这里帮忙。谢谢

【问题讨论】:

    标签: python docker ubuntu docker-compose dockerfile


    【解决方案1】:

    ...What i am missing here so that its not saving images to host directory like /home/ubuntu/images/20220123 instead of inside docker container.

    假设您的意思是要将图像保存到主机上的目录而不是容器内。无需挂载/var/lib/docker/...。您需要确保您的程序将文件保存到绑定安装到主机的路径。例子:

    mkdir images # 在主机上创建一个目录来存放图片

    docker run -it --rm -v ~/images:/images alpine ash -c "mkdir /images/yesterday; mkdir /images/today; echo 'hello' > /images/today/msg.txt; echo 'done.'"

    容器退出后,在主机上发出ls -ld images/*会显示创建的2个目录; cat images/today/msg.txt 会打印你通过容器保存的内容(模拟你是否通过容器下载图片)。

    【讨论】:

    • 如前所述,我已经创建了一个目录并运行上述命令,它可以正常工作。我已经像这样sudo docker run -it --rm -v ~/images:~/images --network=host testapp/img-downloader:0.0.1 构造了我的,并且它按预期工作。非常感谢
    • 将其标记为答案,因为它按预期工作。
    • 当然我会标记它,请您再指导一件事。每天下载图像后,应用程序通过testapp/testapp/upload_report.py读取此文件testapp/assets/img_report.json并修改详细信息,然后上传到s3。但现在它说没有文件/assets/img_report.json
    • 当你的程序作为容器运行时的样子;它假定主机上的目录结构而不是图像上的目录结构?这与您将 python 项目复制到图像中的方式有​​关。论坛遵守1问题1回答规则,你可以用你的项目目录信息发起一个新问题,更多的帮助会来。
    • 当然谢谢,如果有人遇到类似问题,我会先谷歌,如果找不到,我会发布一个问题
    猜你喜欢
    • 2016-11-10
    • 2020-09-20
    • 2017-12-27
    • 2019-07-08
    • 1970-01-01
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多