如何在 Podman 上从本地计算机挂载卷

Car*_*bes 22 podman

我正在尝试使用 Podman 进行本地开发。我的想法是使用本地文件夹并将其与我将运行应用程序的容器同步。

我发现,-v如果我使用 Docker,我将使用的选项可以与服务器计算机一起使用,正如文档中所述-v Bind mount a volume into the container. Volume src will be on the server machine, not the client。因此,当我使用该选项时,该文件夹未安装,并且当我使用以下命令访问它时找不到它podman exec -it application bash

我有办法解决这个问题吗?我想要相当于:

docker run -v localFolder:/remoteFolder application

其中localFolder是我本地计算机中的路径,它将映射到remoteFolder容器上

zhi*_*ang 29

podman machine stop podman-machine-default
podman machine rm podman-machine-default

podman machine init -v $HOME:$HOME
podman machine start

podman run -ti --rm -v $HOME:$HOME busybox
Run Code Online (Sandbox Code Playgroud)

  • 刚刚测试过,是的,它有效。不明白为什么官方 podman machine init 手册页说:````根文件系统在默认操作系统中以只读方式挂载,因此必须在 /mnt 目录下创建挂载。``` https://docs.podman.io/en/latest/markdown/podman-machine-init.1.html 也许随着时间的推移有些东西发生了变化。谢谢@安德烈!我更新了答案。 (2认同)

Pet*_*vic 7

您需要确保首先将卷安装到 podman 机器(在podman machine init命令中)。

\n

让\xe2\x80\x99s 说,我们\xe2\x80\x99感兴趣的是:

\n
    \n
  • 将 $HOME 目录(或其任何\xe2\x80\x99s 子目录)挂载到容器的选项,
  • \n
  • 为 podman 机器保留 4 个 CPU、60GB 磁盘空间和 6GB 内存。
  • \n
\n

让\xe2\x80\x99s 使用以下命令创建 podman 机器:

\n
podman machine init --cpus=4 --disk-size=60 --memory=6096 -v $HOME:$HOME\n
Run Code Online (Sandbox Code Playgroud)\n

然后启动它:

\n
podman machine start\n
Run Code Online (Sandbox Code Playgroud)\n

要查看它是否运行,让\xe2\x80\x99s 使用:

\n
podman machine ls\n
Run Code Online (Sandbox Code Playgroud)\n

首先让\xe2\x80\x99s 在不挂载的情况下运行示例 (ubuntu) 容器,然后查看目录中存在什么/opt

\n
podman run ubuntu ls /opt\n
Run Code Online (Sandbox Code Playgroud)\n

没有输出表明/opt容器中的目录为空。

\n

现在让\xe2\x80\x99s 尝试使用卷安装选项:

\n
mkdir test-dir\ntouch test-dir/test-file.txt\npodman run -v ./test-dir:/opt ubuntu ls /opt\ntest-file.txt\n
Run Code Online (Sandbox Code Playgroud)\n

我们看到,现在可以在容器中访问包含 it\xe2\x80\x99s 内容的挂载目录!

\n

(内容摘自:\n https://medium.com/@butkovic/favoring-podman-over-docker-desktop-33368e031ba0

\n


bN_*_*bN_ 5

如果您有 Windows 和 WSL(适用于 Linux 的 Windows 子系统),则可以创建卷,而无需删除并重新初始化 podman-machine-default。

首先使用 WSL 连接到 podman 机器:

wsl -d podman-machine-default
Run Code Online (Sandbox Code Playgroud)

然后执行这些命令:

wsl -d podman-machine-default
Run Code Online (Sandbox Code Playgroud)

现在要与容器共享文件,请将它们从 WSL 挂载点复制到卷挂载点:

[root@COMPUTER ~]# podman volume create myVolume
myVolume
[root@COMPUTER ~]# podman volume mount myVolume
/var/lib/containers/storage/volumes/myVolume/_data
Run Code Online (Sandbox Code Playgroud)

最后,您可以在容器中安装卷来访问这些文件。退出 wsl 并运行:

podman run --rm -v myVolume:/remoteFolder -t docker.io/bash ls /remoteFolder
Run Code Online (Sandbox Code Playgroud)

小心,参数顺序很重要