费多拉 Linux 36
我在 /etc/fstab 中有以下形式的安装:
192.168.1.101:/volume1/video /mnt/synology_video nfs rsize=8192,wsize=8192,intr,comment=systemd.automount 0 0
192.168.1.101:/volume1/music /mnt/synology_music nfs rsize=8192,wsize=8192,intr,comment=systemd.automount 0 0
当机器启动时,systemctl 将显示安装的状态,如下所示......注意“等待”状态:
mnt-synology_music.automount loaded active waiting mnt-synology_music.automount
mnt-synology_video.automount loaded active waiting mnt-synology_video.automount
我有一个运行 jellyfin 服务器的 podman 容器,需要使用在单元文件中设置的 podman-start 重新启动该服务器,如下所示:
[Unit]
Description=Podman Start All Containers With Restart Policy Set To Always
Documentation=man:podman-start(1)
StartLimitIntervalSec=0
Wants=network-online.target
After=network-online.target mnt-synology_music.automount mnt-synology_video.automount
[Service]
Type=oneshot
RemainAfterExit=true
Environment=LOGGING="--log-level=info"
ExecStart=/usr/bin/podman $LOGGING start --all --filter restart-policy=always
ExecStop=/bin/sh -c '/usr/bin/podman $LOGGING stop $(/usr/bin/podman container ls --filter restart-policy=always -q)'
[Install]
WantedBy=default.target
podman 容器本身使用卷挂载(-v 选项)来挂载到主机上的那些文件系统(也许这是我需要更改的部分,直接挂载?)。
但是,当容器尝试重新启动时会失败每个安装恰好一次,然后成功有关符号链接的错误。我没有使用任何符号链接:
Error: OCI runtime error: crun: error stat'ing file `/mnt/synology_music`: Too many levels of symbolic links
当容器撞击每个安装座时,或者如果我只是手动ls
安装,systemd的状态神奇地变成了跑步。目录中的一个ls
现在点亮了安装座,很明显它们之前实际上并未“连接”,并且正在等待某些东西来接触它们:
mnt-synology_music.automount loaded active running mnt-synology_music.automount
mnt-synology_video.automount loaded active running mnt-synology_video.automount
然后似乎存在某种额外级别的“在启动 nfs 挂载之前等待某些内容实际接触目录”,并且它阻止我的容器干净地重新启动。当容器统计每个文件系统时,systemd 神奇地实际上启动安装,然后它就可以工作,但是,这会阻止自动重新启动工作。
我找不到任何影响此行为的选项。我实际上在某个地方看到了一条评论,说只是做ls -l
来启动它们,这太疯狂了。我需要这些东西自动运行,而我必须编写一个ls -l
命令来完成它,这似乎很疯狂。
如何正确解决这个问题?
答案1
好的,谢谢社区,答案是创建podman卷直接挂载到nfs,这样容器就会到达 podman 卷并由 podman 进行挂载。
我使用 ansible 所以这看起来像:
- name: mount same volumes with podman too
containers.podman.podman_volume:
state: present
name: "{{ item.name }}"
options:
- "type=nfs"
- "o=rw"
- "device=192.168.1.101:{{ item.path }}"
with_items:
- {"name": "synology_music", "path": "/volume1/music"}
- {"name": "synology_video", "path": "/volume1/video"}
# later, run container
- name: run container
containers.podman.podman_container:
image: docker.io/jellyfin/jellyfin:latest
name: jellyfin
recreate: "{{ force_container_rebuild|bool }}"
restart_policy: always
privileged: yes
capabilities:
- NET_ADMIN
published_ports:
- "{{ jellyfin_service_ip }}:8096:8096/tcp"
- "{{ jellyfin_service_ip }}:8920:8920/tcp"
- "{{ jellyfin_service_ip }}:1900:1900/udp"
- "{{ jellyfin_service_ip }}:7359:7359/udp"
volumes:
- "{{ infrastructure_path }}/jellyfin/config:/config:Z"
- "{{ infrastructure_path }}/jellyfin/cache:/cache:Z"
- "synology_video:/video"
- "synology_music:/music"