在容器裡建一個目錄掛載到宿主主機的實體目錄,在docker的指令參數是docker -v 宿主主機路徑:容器路徑,如:
$ docker run -it -v /home/appuser/FTP:/FTP a2a-batch /bin/bash
而在podman quadlet的.container是怎麼設定:
[Container]
Image=localhost/a2a-batch:20260812-01
ContainerName=a2a-batch
PublishPort=8085:8085
Network=a2a-net.network
Volume=/home/appuser/a2a-log/batch:/var/log:Z
Volume=%h/FTP:/FTP:z
Volume=/a2a/AP:/a2a/AP
三個Volume設定呈現三種用法。要作為營運用的Linux,大多會啟用SELinux(Secure
Enhance Linux,資安強化,份量足以當作鐵人賽的主題)。
在.container檔下設定Volumne的語法是:
Volume=宿主主機路徑:容器路徑:SELinux參數
Volumen=%h/FTP:/FTP:Z,結果第二個容器雖然啟動成功,但功能不work,因為%h/FTP被第一個容器專用。所以設為小寫z就是指宿主主機路徑可以多容器公用。最後一個Volume的宿主主機路徑是從根目錄開始建起,據Podman Quadlet官方建議,應用程式所存取的路徑最好都放在HOME目錄下比較沒有資安權限問題。但若堅持一定要存取/a2a/AP路徑,則需以下調整:
若沒有SELinux情況,只需將該目錄的owner設為appuser即可,需以root權限執行:
$ chown -R appuser:appuser /a2a
而有SELinux的情況除了上述動作,還需以root權限做以下設定才能讓rootless帳號存取:
$ sudo chcon -Rt container_file_t /a2a
遞迴給/a2a下所有子目錄及檔案給予contaienr_file_t標籤,表示允許該目錄下所有子目錄及檔案允許被容器存取。
以上是直接在.container檔設定Volume,而除了.network與.container檔。Podman Quadlet也提供.volume可以替代.container檔裡的Volume。但不太建議用在資安要求較高的運行環境。這部份有研究完再補。