无法将主机目录挂载到 docker 容器
Unable to mount host directory to docker container
我有一个 python 应用程序,它每天 运行 用于下载图像并将它们保存到指定的文件夹中,每天创建文件夹,就像这样 /home/ubuntu/images/yyyymmdd
。
我在 ubuntu 20 上构建了我的 python 应用程序的 docker 容器。当我尝试通过挂载主机目录来 运行 应用程序时,然后记录消息打印文件夹已创建 /home/ubuntu/images/20220123
但我看不到任何文件夹。
我检查了 docker 文件夹 /var/lib/docker
,发现 随机哈希 是在文件夹 containers
和 overlay2
中创建的.所以我尝试使用下面的两个目录进行挂载,但没有成功。
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" ]
请在这里帮忙。谢谢
...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
将打印您通过容器保存的内容(模拟如果您通过容器下载图像)。
我有一个 python 应用程序,它每天 运行 用于下载图像并将它们保存到指定的文件夹中,每天创建文件夹,就像这样 /home/ubuntu/images/yyyymmdd
。
我在 ubuntu 20 上构建了我的 python 应用程序的 docker 容器。当我尝试通过挂载主机目录来 运行 应用程序时,然后记录消息打印文件夹已创建 /home/ubuntu/images/20220123
但我看不到任何文件夹。
我检查了 docker 文件夹 /var/lib/docker
,发现 随机哈希 是在文件夹 containers
和 overlay2
中创建的.所以我尝试使用下面的两个目录进行挂载,但没有成功。
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" ]
请在这里帮忙。谢谢
...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
将打印您通过容器保存的内容(模拟如果您通过容器下载图像)。