iT邦幫忙

2026 iThome 鐵人賽

DAY 6
0

在容器裡建一個目錄掛載到宿主主機的實體目錄,在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參數
  • %h其實就是HOME變數,這裡%h就是指/home/appuser。
  • 大寫的Z就是該Volume是該容器專屬,我曾在兩個容器設定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。但不太建議用在資安要求較高的運行環境。這部份有研究完再補。


上一篇
建個前端容器感受一下Podman Quadlet
下一篇
容器上的芳鄰:.Volume
系列文
Podman Quadlet-容器服務化(在單體系統到微服務之間)10
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言