将docker容器中的信息保存到本地



我正试图将在docker映像(docker_test.csv(中创建的文件保存到本地机器上。

我有一张像的图片

FROM python:3.9-alpine3.13

RUN echo hello >> 'docker_test.csv'

我使用这条线创建图像

docker build --tag dockerfile .

我尝试使用运行

docker run -v $(pwd): -p 8080:8080 -it dockerfile

但我得到以下错误

docker:后台进程的错误响应:无效的卷规范:'/host_mnt/Users/username/documents:'

我不确定从这里开始该怎么办,我尝试了不同的路径配置,但一切似乎都会导致错误。

您缺少卷装载的另一半。

冒号前面的部分是到主机系统的路径,冒号后面的部分是容器内部的路径。结肠后面没有任何部分。

-v $(pwd): 

它应该看起来像这样。

-v $(pwd):/path/in/container 

尽管如此,这将用卷内的数据(在这种情况下是来自主机系统的文件(覆盖该路径上容器内的数据。

据我所知,您可以指定一个卷,使其在首次装入时从容器写入卷,而不是用卷内的数据覆盖容器的文件系统,这是默认行为。此处对此进行了记录https://docs.docker.com/storage/volumes/#populate-a容量单容器

docker run -d 
--name=nginxtest 
--mount source=nginx-vol,destination=/usr/share/nginx/html 
nginx:latest

不过,该示例使用的是命名卷。要在主机系统上的某个任意位置执行此操作是很棘手的。

在compose中,这种类型的卷看起来是这样的。

volumes:
myvolume:
driver: local
driver_opts:
type: none
o: bind
device: ./myvolume

使用CLI执行此操作相当麻烦。我不完全确定这会是什么样子。

也许,像下面这样。您需要对此进行实验,并仔细研究相关文档。

--mount 'source=myvolume,destination=/path/in/container,volume-driver=local,volume-opt=type=none,volume-opt=o=bind,volume-opt=device=./myvolume'

也就是说,将空卷装载到容器内的空路径,并在装载后创建文件会更容易,这将导致文件出现在主机系统上。

为此,请使用CMD而不是RUN指令。

FROM python:3.9-alpine3.13
CMD echo hello >> '/output/docker_test.csv'

然后构建映像并运行它,以标准方式装入卷。

mkdir output
docker run -v "$PWD/output:/output" myimage

最新更新