将 docker 个容器中的信息保存到本地
Save information from docker container to local
我正在尝试将在 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: Error response from daemon: invalid volume specification: '/host_mnt/Users/username/documents :'
我不确定从这里去哪里,我尝试了不同的路径配置,但一切似乎都会导致错误。
您缺少另一半的卷安装。
冒号前的部分是宿主系统的路径,冒号后的部分是容器内部的路径。嗯,冒号后面没有了。
-v $(pwd):
它应该看起来像这样。
-v $(pwd):/path/in/container
不过,这会用卷内的数据覆盖该路径上的容器内的数据,在这种情况下,来自主机系统的文件。
据我所知,您可以指定一个卷,使其在第一次挂载时从容器写入卷,而不是用卷内的数据覆盖容器的文件系统,这是默认行为。这在此处记录 https://docs.docker.com/storage/volumes/#populate-a-volume-using-a-container
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 而不是 运行 指令。
FROM python:3.9-alpine3.13
CMD echo hello >> '/output/docker_test.csv'
然后构建映像并 运行 它,以标准方式安装卷。
mkdir output
docker run -v "$PWD/output:/output" myimage
我正在尝试将在 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: Error response from daemon: invalid volume specification: '/host_mnt/Users/username/documents :'
我不确定从这里去哪里,我尝试了不同的路径配置,但一切似乎都会导致错误。
您缺少另一半的卷安装。
冒号前的部分是宿主系统的路径,冒号后的部分是容器内部的路径。嗯,冒号后面没有了。
-v $(pwd):
它应该看起来像这样。
-v $(pwd):/path/in/container
不过,这会用卷内的数据覆盖该路径上的容器内的数据,在这种情况下,来自主机系统的文件。
据我所知,您可以指定一个卷,使其在第一次挂载时从容器写入卷,而不是用卷内的数据覆盖容器的文件系统,这是默认行为。这在此处记录 https://docs.docker.com/storage/volumes/#populate-a-volume-using-a-container
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 而不是 运行 指令。
FROM python:3.9-alpine3.13
CMD echo hello >> '/output/docker_test.csv'
然后构建映像并 运行 它,以标准方式安装卷。
mkdir output
docker run -v "$PWD/output:/output" myimage