Podman 无法将本地文件挂载到容器中

问题描述 投票:0回答:2

我计划从 Docker 迁移到 Podman。 我经常使用 docker-compose,所以我也计划切换到 podman-compose。

但是我陷入了最简单的 podman 示例,我似乎无法将卷安装到我的容器上?显然我做错了什么,但我不知道它是什么。

我的源文件肯定存在于我的(硬件)主机上(所以不是 podman 机器)。但我不断收到错误“没有这样的文件或目录”。

有趣的是,如果我在 podman 机器本地手动创建相同的文件(podman 机器 ssh --> touch /tmp/test.txt),它工作得很好。

问题是;

  • 我是否应该(手动?)将所有本地文件挂载到 Fedora VM(podman 机器)上,以便可以在我的实际容器中使用此 Fedora 挂载?如果是这样,我该怎么做?
  • 下面的
    podman run
    cmd 应该可以工作,但我还做错了什么?
$ ls -al /tmp/test.txt
-rw-r--r--  1 <username> <group> 10 Dec 8 13:33 /tmp/test.txt

$ podman run -it -v /tmp/test.txt:/tmp/test.txt docker.io/library/busybox
Error: statfs /tmp/test.txt: no such file or directory

$ podman run -it -v /tmp/test.txt:/tmp/test.txt:Z docker.io/library/busybox
Error: statfs /tmp/test.txt: no such file or directory

附加信息:

$ podman info --debug
host:
  arch: amd64
  buildahVersion: 1.23.1
  cgroupControllers:
  - memory
  - pids
  cgroupManager: systemd
  cgroupVersion: v2
  conmon:
    package: conmon-2.0.30-2.fc35.x86_64
    path: /usr/bin/conmon
    version: 'conmon version 2.0.30, commit: '
  cpus: 10
  distribution:
    distribution: fedora
    variant: coreos
    version: "35"
  eventLogger: journald
  hostname: localhost.localdomain
  idMappings:
    gidmap:
    - container_id: 0
      host_id: 1000
      size: 1
    - container_id: 1
      host_id: 100000
      size: 65536
    uidmap:
    - container_id: 0
      host_id: 1000
      size: 1
    - container_id: 1
      host_id: 100000
      size: 65536
  kernel: 5.15.6-200.fc35.x86_64
  linkmode: dynamic
  logDriver: journald
  memFree: 11733594112
  memTotal: 12538863616
  ociRuntime:
    name: crun
    package: crun-1.3-1.fc35.x86_64
    path: /usr/bin/crun
    version: |-
      crun version 1.3
      commit: 8e5757a4e68590326dafe8a8b1b4a584b10a1370
      spec: 1.0.0
      +SYSTEMD +SELINUX +APPARMOR +CAP +SECCOMP +EBPF +CRIU +YAJL
  os: linux
  remoteSocket:
    exists: true
    path: /run/user/1000/podman/podman.sock
  security:
    apparmorEnabled: false
    capabilities: CAP_CHOWN,CAP_DAC_OVERRIDE,CAP_FOWNER,CAP_FSETID,CAP_KILL,CAP_NET_BIND_SERVICE,CAP_SETFCAP,CAP_SETGID,CAP_SETPCAP,CAP_SETUID,CAP_SYS_CHROOT
    rootless: true
    seccompEnabled: true
    seccompProfilePath: /usr/share/containers/seccomp.json
    selinuxEnabled: true
  serviceIsRemote: true
  slirp4netns:
    executable: /usr/bin/slirp4netns
    package: slirp4netns-1.1.12-2.fc35.x86_64
    version: |-
      slirp4netns version 1.1.12
      commit: 7a104a101aa3278a2152351a082a6df71f57c9a3
      libslirp: 4.6.1
      SLIRP_CONFIG_VERSION_MAX: 3
      libseccomp: 2.5.3
  swapFree: 0
  swapTotal: 0
  uptime: 7h 9m 29.12s (Approximately 0.29 days)
plugins:
  log:
  - k8s-file
  - none
  - journald
  network:
  - bridge
  - macvlan
  volume:
  - local
registries:
  search:
  - docker.io
store:
  configFile: /var/home/core/.config/containers/storage.conf
  containerStore:
    number: 4
    paused: 0
    running: 0
    stopped: 4
  graphDriverName: overlay
  graphOptions: {}
  graphRoot: /var/home/core/.local/share/containers/storage
  graphStatus:
    Backing Filesystem: xfs
    Native Overlay Diff: "true"
    Supports d_type: "true"
    Using metacopy: "false"
  imageStore:
    number: 8
  runRoot: /run/user/1000/containers
  volumePath: /var/home/core/.local/share/containers/storage/volumes
version:
  APIVersion: 3.4.2
  Built: 1636748737
  BuiltTime: Fri Nov 12 20:25:37 2021
  GitCommit: ""
  GoVersion: go1.16.8
  OsArch: linux/amd64
  Version: 3.4.2


docker volume mount podman
2个回答
5
投票

正如 @ErikSjölund 所提到的,https://github.com/containers/podman 上有一个积极的治疗。显然 Centos(Podman 机器)还不支持在机器上创建不同类型的卷。

并不是 Podman 本身缺乏此功能,而是等待 CentOS 也支持此功能。

但是,如果您想将本地目录挂载到计算机上,我建议您查看https://github.com/containers/podman/issues/8016#issuecomment-995242552。它描述了如何在 CoreOS 上进行只读挂载(或破坏与本地版本的兼容性)。

信息:

https://github.com/containers/podman/pull/11454 https://github.com/containers/podman/pull/12584


0
投票

我也跑了:

podman machine set --rootful podman-machine-default
© www.soinside.com 2019 - 2024. All rights reserved.