我必须按照Dockerfile来创建一个容器镜像。这对一些脚本来说很好用。
FROM python:3.8-slim-buster
COPY . /work
WORKDIR /work
RUN apt-get update
RUN apt-get upgrade -y
RUN pip install -r requirements.txt
然而,我有一个脚本需要访问我的本地下载文件夹。我的理解是,容器会用Dockerfile所在目录的副本创建一个镜像。然而,我不明白如何让容器访问我的下载文件夹。任何帮助将是巨大的
对于挂载或共享的目的,你可以使用docker卷,这是docker的存储机制。你应该把文件从你的主机挂载到容器中。
docker run -v [host directory path]:[container directory path] -it [image name]
这个命令将只是挂载你的主机目录,无论你给容器的访问权是什么
您可以将下载文件夹挂载到您的Docker服务上 假设您已经用镜像名称NAMEOFBUILTDOCKER构建了您的服务。
docker run -d \
--name devtest \
--mount source=pathto/downloads,target=/work \
NAMEOFYOURBUILTDOCKER
挂载比 -volume 更加啰嗦,但目的是一样的。这将使你的服务以分离模式(-d)旋转起来,名称为devtest,下载的内容在工作中。
有两种方法,你可以采取。
添加一个卷。
当你建立了你的Dockerfile后,你可以用一个卷来运行它。你可以用一个卷来运行它。把volume看作是你的主机和容器之间的共享文件夹。你可以看看文档 此处.
docker run [OPTIONS] -v /path/to/downloads:/work
它将建立快速和运行快速。但如果你的文件夹改变你的容器也会改变。如果你想坚持你的容器。
改变构建上下文。
当你构建你的图像时,你会给它一个上下文。
docker build -t my-tag .
命令末尾的点代表你运行命令的当前目录。如果你想给你的 /Downloads
文件夹到上下文中,你需要运行如下的构建函数。之后,你可以声明 COPY Downloads/ Downloads/
在你的Dockerfile中。请记住,Dockerfile中所有使用本地文件系统的路径都是相对于构建上下文的。比如下面的例子,如果你想在Docker文件中执行 COPY . /work
在你的答案中,你需要把它改为 COPY /path/to/your/docker/file/ /work
# Go to your users root directory.
cd ~/
# This will add all of the folders including Downloads to your build context.
docker run build -t my-tag -f /path/to/your/docker/file/Dockerfile .
请记住,建议尽可能保持你的构建上下文小。当你把所有的文件夹都添加到构建上下文中时,速度会很慢。就像我说的,这只是一个实验。但如果你真的想要一个快速和持久的解决方案,只需将你的下载文件夹和你的Docker文件复制到同一个文件夹中。干杯!
我有一个使用docker-compose的解决方案。
docker-compose
version: "3"
services:
myservice:
build:
context: . # DOT (".") means in this root directory, have a dockerfile to build the image
image: myDownloadAppBuild:latest
container_name: myDownloadApp
volumes:
- <HOST-MACHINE-DIR-PATH>:/app # HOST_MACHINE-DIR-PATH E:/MyDownload AND /app path inside container which points to your download folder.
ports:
- <HOST-PORT-ID>:<CONTAINER-PORT-ID>
docker文件
FROM python:3.8-slim-buster
COPY . /work
WORKDIR /work
VOLUME /app #YOUR DOWNLOAD DIR PATH
RUN apt-get update
RUN apt-get upgrade -y
RUN pip install -r requirements.txt
或者你已经有了一个命令来做这件事。
docker run <OTHER OPTIONS> -v /path/to/downloads:E:/myAppDownloadMount